Поскольку вы возвращаетесь по ссылке, а не по значению, из f
.Это означает, что срок действия A
превышает f()
, например
A&& f()
{
static A res;
return std::move(res);
}
или
A global;
A&& f()
{
return std::move(global);
}
Но не
A&& f()
{
return {}; // dangling reference
}
In f().m;
, использование m
наследует категорию значений предыдущего под-выражения, как обычно для доступа к элементу.