首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有一个函数指针模板参数接受一个rvalue引用合法吗?

有一个函数指针模板参数接受一个rvalue引用合法吗?
EN

Stack Overflow用户
提问于 2014-10-29 13:39:14
回答 1查看 267关注 0票数 0

使用2012,我尝试编译以下内容:

代码语言:javascript
复制
template <void (*f)(int && y)>
void foo() {}

得到这个错误:

代码语言:javascript
复制
error C2993: 'int &&' : illegal type for non-type template parameter 'y'

这真的违法吗?或者这是MSVS中的一个bug?如果是的话,有人知道它在以后的版本中是否有效吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-29 20:02:33

这确实是‘s 2012编译器中一个无效的错误,它被函数类型中的参数名称弄糊涂了,认为函数类型的参数是模板参数,因此出现了抱怨。G++ 4.8和4.9在C++11模式下接受此代码,Clang3.3和ICC 13也是如此;这是使用哥德波特交互式编译器检查的。此外,根据N3337 14.1 (temp.param) p4,不受函数参数或返回类型的限制,允许指向函数的指针和lvalue引用:

非类型模板参数应具有下列类型之一(可选cv限定类型):

  • 整型或枚举型,
  • 指向对象或指向函数的指针,
  • lvalue引用对象或lvalue引用函数,
  • 指向成员的指针,
  • std::nullptr_t

解决方法如注释中提到的jrok所示:只需从函数类型中删除参数名称--所有我能够用它进行测试的编译器都接受它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26631872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档