将左值绑定到MSVS2010下的右值引用

时间:2012-01-12 19:46:04

标签: c++ c++11 visual-c++-2010 rvalue-reference

#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输出:

  

错误C2664:'Foo<T>::Foo(T &&)':无法将参数1从'int'转换为'int &&'

我不能将左值绑定到右值参考是否正常?

修改

功能相同:

void f(int && v)
{

}
int v;
f(v); //won't compile

我有点困惑,因为我认为std :: forward对于检测是否使用左值或右值引用调用方法很有用。 但似乎我们不能将任何左值绑定到右值参考...至少没有模板参数但我不太了解

1 个答案:

答案 0 :(得分:2)

调用移动构造函数需要r值而不是l值是正常的,因为l值可以在移动构造函数运行后命名,并且使用move-from值会引起意外行为。