Пункт из черновика N3290 C++, § 12.2, 5-й пункт, строка 10.
Второй контекст — это когда ссылка привязана к временному объекту. Временный объект, к которому привязана ссылка, или временный объект, являющийся полным объектом подобъекта, к которому привязана ссылка, сохраняется в течение всего времени существования ссылки, за исключением:
Временная привязка к ссылке в новом-инициализаторе (5.3.4) сохраняется до завершения полного выражения, содержащего новый-инициализатор. [ Пример:
struct S { int mi; const std::pair<int,int>& mp; }; S a { 1, {2,3} }; S* p = new S{ 1, {2,3} };// Creates dangling reference
— конец примера ] [Примечание: это может привести к появлению висячей ссылки, и реализациям рекомендуется выдавать предупреждение в таком случае. — примечание в конце]
Это дополнительный момент по сравнению с C++03. Но пример для меня непонятен. Не могли бы вы пояснить этот момент на каком-нибудь другом примере?
Я знаю, что такое висячие ссылки и временные объекты, и что std::pair
содержит два значения, возможно, разных типов данных.