Ответ 1
Указывает ли ссылка на временную "выживать" до тех пор, пока она не будет назначена на x?
Как правило, да. Если foo
возвращает dflt
, эта ссылка (для временного 5) действительна до конца полного выражения, в котором она была создана, то есть до момента инициализации.
С++ 03, 12.2/3:
Когда реализация вводит временный объект класса, который имеет нетривиальный конструктор (12.1), он должен гарантировать, что a конструктор вызывается для временного объекта. Аналогичным образом, деструктор должен быть вызван на временное с нетривиальным деструктор (12.4). Временные объекты уничтожаются как последний шаг в оценивая полное выражение (1.9), которое (лексически) содержит где они были созданы. Это справедливо, даже если эта оценка заканчивается бросанием исключения.
Больше приходит в 12.2/4 и 12.2/5, особенно исключения этого правила.
Я не вижу, что произойдет, когда он вернет ...
, который вы оставили, но я думаю, вы не спрашивали об этом.