У меня есть следующая установка:
struct foo
{
void bar( ) & { std::cout << "lvalue\n"; }
void bar( ) && { std::cout << "rvalue\n"; }
~foo( ) { bar( ); }
};
int main( int arg, char **argv )
{
foo{ }.bar();
}
что приводит к выводу
rvalue
lvalue
Я не понимаю вывод dtor, который всегда равен lvalue
, как бы я ни старался. Хотя я согласен с тем, что адрес, аналогичный
(*this).bar( ); // sure enough this will print lvalue
вызывает lvalue-overload. Я не понимаю, почему я никогда не могу получить вывод rvalue
для dtor.
Я нахожу это странным, поскольку объект сначала является rvalue и каким-то образом привязывается к lvalue перед уничтожением. В чем тут дело?