msc*_*msc 10 c++ templates const c++14
为什么以下代码无法在C++ 14编译器中编译?如果我使用
const int i = 10;
int n = fun(i);
Run Code Online (Sandbox Code Playgroud)
编译器出错.
但是,如果我使用
int n = fun(10);
Run Code Online (Sandbox Code Playgroud)
而不是上述陈述,它工作正常.
例:
template<typename T>
int fun(const T&&)
{
cout<<"fun"<<endl;
}
int main()
{
// int i = 10; // Not work
const int i = 10; // Not work
int n = fun(i);
// int n = fun(10); // Working fine
}
Run Code Online (Sandbox Code Playgroud)
Sto*_*ica 17
它失败,因为添加const会阻止它成为转发引用.它成为const rvalue的常规引用:
...转发引用是对cv-unqualified 模板参数的rvalue引用,该参数不表示类模板的模板参数(在类模板参数推导期间[[over.match.class.deduct]))....
然后你传递一个左值.它没能通过比赛.