#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();
}
визуальный вывод C ++ 2010:
ошибка C2664: 'Foo<T>::Foo(T &&)'
: невозможно преобразовать параметр 1 из 'int'
в 'int &&'
Этонормально, что я не могу связать lvalue со ссылкой на rvalue?
РЕДАКТИРОВАТЬ:
то же самое для функции:
void f(int && v)
{
}
int v;
f(v); //won't compile
IЯ немного сбит с толку, потому что я думаю, что std :: forward полезен для определения, вызывается ли метод со ссылкой lvalue или rvalue.Но похоже, что мы не можем привязать lvalue к rvalue-ссылке ... по крайней мере, без параметра шаблона, но я не очень хорошо понимаю это