#c #c 11 #rvalue-reference
#c #c 11 #rvalue-ссылка
Вопрос:
Являются ли объекты внутри объекта, на который ссылается rvalue, также ссылками на rvalue?
struct A{
};
struct B{
A a2;
};
//template<class B>
void test(B amp;amp;b){
// 1. Is this the correct way?
auto amp;amp;in3 = std::forward<B>(b).a2;
std::cout << std::is_rvalue_reference<decltype(in3)>::value;
// return true
// 2. or this?
auto amp;amp;in4 = b.a2;
std::cout << std::is_rvalue_reference<decltype(in4)>::value;
// return false
}
test(B());
Ответ №1:
Да, члены rvalues сами являются rvalues . Это было разъяснено DR 421
Но здесь это не имеет значения:
auto amp;amp;in4 = b.a2;
b
это не значение rvalue, это значение lvalue (простое эмпирическое правило: у него есть имя).
Чтобы восстановить категорию значений, которую она имела при передаче в нужную вам функцию forward
Комментарии:
1. Проблема, похоже, проясняется здесь .