Не упоминается в списке исключений, поэтому время жизни до временного должно быть увеличено, чтобы соответствовать времени жизни (массива) foo_holder
с.Однако для меня это выглядит упущением, возможно, хорошей идеей может быть отправка отчета о дефектах.
§12.2 / 5 гласит, что, когда ссылка связана с временным, время жизни временного расширения увеличивается до совпадения.время жизни ссылки и поскольку const foo& f
является членом foo_holder
, время жизни ссылки соответствует времени жизни foo_holder
, в соответствии с §3.7.5 / 1:
Продолжительность храненияподобъектов-членов, подобъектов базового класса и элементов массива - это их завершенный объект (1.8).
Это может быть немного сложно интерпретировать с учетом ссылок, поскольку §3.8 / 1 утверждает, что время жизниобъект заканчивается, когда память освобождается или используется повторно:
Время жизни объекта типа T заканчивается, когда:
- если T является типом класса с нетривиальным деструктором (12.4), начинается вызов деструктора, или
- хранилище, которое занимает объект, используется повторно или освобождается.
однако оно не определеноиспользуют ли ссылки хранение или нет;§8.3.2 / 4 гласит:
Не определено, требует ли ссылка хранения (3.7).
Возможно, кто-то с лучшим знанием стандарта узнает это лучше.