Здравствуйте, Кодт, Вы писали:
К>Кстати да, можно и потерять владение временным объектом! К>Натурный эксперимент показывает, что компилятор со спокойной душой теряет. К>Т.е. получается const A& ref = A().operator const A&(), дальше мы запоминаем возвращённую ссылку, а временный объект спокойно разрушаем.
Да, я тоже предполагаю, что все так и происходит. Хотя, на мой взгляд, у возвращаемого значения должно работать некое рекурсивное правило — скажем, если мы приводим объект к константной ссылке, его время жизни продлевается. Соответственно, если мы эту константную ссылку вытаскиваем дальше — и запоминаем в другой константной ссылке — то она продлевает время жизни промежуточной ссылки.
К>Отсюда мораль: нестандартное поведение gcc порождает ошибки.
Угу. Осталось только определить, насколько корректно такое поведение с точки зрения Стандарта.