2
#include<iostream>
template<class T>
struct Foo
{
T v_;
Foo(T&& v):v_(std::forward<T>(v))
{
std::cout << "building Foo..\n";
}
};
int main()
{
int v;
Foo<int> foo(v);
std::cin.ignore();
}
的Visual C++ 2010輸出:下結合左值到右值參考MSVS2010
錯誤C2664:
'Foo<T>::Foo(T &&)'
:不能從'int'
轉換參數1至'int &&'
它是正常的,我不能將一個左值綁定到右值引用?
編輯:
的功能相同的事情:
void f(int && v)
{
}
int v;
f(v); //won't compile
我是一個有點困惑,因爲我認爲的std ::前鋒是有用的檢測,如果一個方法被調用了左值或右值引用。 但似乎我們不能綁定任何左值到右值引用......至少沒有模板參數,但我不明白它很好
是的,這是正常的。參考摺疊規則只適用於構造函數本身是模板的情況。 – ildjarn 2012-01-12 19:48:41
@ildjarn:謝謝,你知道這個的原因嗎? – Guillaume07 2012-01-12 19:54:18
如果引用合攏規則總是應用於右值引用語法而不考慮上下文,那麼就不可能具體表示真正的右值引用,這將不會非常有用。 – ildjarn 2012-01-12 19:55:58