【发布时间】:2016-02-15 10:43:54
【问题描述】:
根据msvc、gcc和clang,以下代码是非法的:
template <typename T>
void f(T&& e) {
std::vector<T> v;
// do something with v and e ...
}
int main() {
int i;
f(i);
}
msvc 产生
xmemory0(591): 错误 C2528: 'pointer': 指向引用的指针是 非法
gcc 和 clang 给出类似的错误信息。请注意,未使用通用参考参数e。编译器显然无法实例化向量v,抱怨它与int 的引用一起使用:
注意:参见类模板实例化的参考
'std::vector<T,std::allocator<_Ty>>'正在编译 与[ T=int &, _Ty=int & ]
但我看不到函数模板 f 是在哪里引用 int 来实例化的。
有人可以解释我们在这里看到的编译器错误吗?
【问题讨论】:
-
请注意,转发参考现在是首选术语。