2014-06-09 30 views
-3
template<typename T> 
void foo(T&& a) 
{ 
    cout << is_rvalue_reference<T>::value << endl; 
} 

struct O 
{ 
}; 

O o; 
foo(o); //T is deduced to o&,a is O& 
foo(std::move(o)); //T is deduced to O,a is O&& 

大家好。 有没有办法让foo输出1(T推导为O & &)?关于完美转发时的类型扣除

回答

3

否。没有类型会被推断为右值引用类型。推导的类型是左值引用类型或非引用类型。

参考在“通用参考”结构中键入输出为T &&(不是T)。