Это выводит F~
, но я ожидал ~F
#include <iostream>
struct Foo {
int _x;
operator const int & () const {return _x;}
~ Foo () {std :: cout << "~";}
};
void foo (const int &)
{
std :: cout << "F";
}
int main ()
{
foo (Foo ());
}
Я построил это как контрпример, чтобы показать, что наиболее важный-const является скорее исключением, чем правилом.Обычно это записывается как
, когда константная ссылка связывается с временным, тогда время жизни этого временного объекта увеличивается до времени жизни ссылки
Я пыталсяпроиллюстрируем, что, хотя Foo()
является временным, ссылка на _x
, возвращаемая оператором преобразования, не является и что приведенный выше код небезопасен.* является безопасным, срок действия временного Foo()
продлен существованием константной ссылки на одного из его членов.
Правильно ли это?Где в стандарте это указано?