Are objects inside rvalue referenced object, also rvalue referenced?
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());
Yes, members of rvalues are themselves rvalues. This was clarified by DR 421
But that is irrelevant here:
auto &&in4 = b.a2;
b
is not an rvalue, it's an lvalue (simple rule of thumb: it has a name).
To restore the value category it had when passed to the function you need to forward
it
来源:https://stackoverflow.com/questions/24380677/are-objects-inside-rvalue-referenced-object-also-rvalue-referenced