Точка от черновата на 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
съдържа две стойности на вероятно различни типове данни.