rvalue中的对象是否引用了对象,是否引用了rvalue?

tow*_*120 5 c++ rvalue-reference c++11

rvalue中的对象是否引用了对象,是否引用了rvalue?

struct A{
};

struct B{
   A a2;
};

//template<class B>
void test(B &&b){

    // 1. Is this the correct way?
    auto &&in3 = std::forward<B>(b).a2;
    std::cout << std::is_rvalue_reference<decltype(in3)>::value;
    // return true

    // 2. or this?
    auto &&in4 = b.a2;
    std::cout << std::is_rvalue_reference<decltype(in4)>::value;    
    // return false        
}

test(B());
Run Code Online (Sandbox Code Playgroud)

http://coliru.stacked-crooked.com/a/bcf0f7dc4cc0440e

Jon*_*ely 7

是的,rvalues的成员本身就是rvalues.DR 421澄清了这一点

但这与此无关:

auto && in4 = b.a2;

b 它不是一个右值,它是一个左值(简单的经验法则:它有一个名字).

要恢复价值范畴,它已传递给函数,当你需要forward