Просто прочитайте ответ Коломбо .
Это ошибка gcc. Соответствующее правило находится в [class.temporary] :
Существует два контекста, в которых временные файлы уничтожаются в другой точке, чем конец полного выражения. [...]
Второй контекст - это когда ссылка привязана к временному. Временное, к которому привязана ссылка, или временное, являющееся полным объектом подобъекта, к которому привязана ссылка, сохраняется для времени жизни ссылки, за исключением: - временного объекта, связанного с опорным параметром в вызове функции (5.2. 2) сохраняется до завершения полного выражения, содержащего вызов. - срок жизни временной привязки к возвращаемому значению в операторе return функции (6.6.3) не продлевается; временное уничтожается в конце полного выражения в операторе return. - Временная привязка к ссылке в [new] инициализаторе (5.3.4) сохраняется до завершения полного выражения, содержащего новый инициализатор .
Мы привязываем ссылку на подобъект временного, поэтому временное должно сохраняться для срока службы ссылки. Ни одно из этих трех исключений из этого правила не применяется здесь.