Это болтливая ссылка. Из [class.temporary]/4-5:
Существует два контекста, в которых временные объекты уничтожаются в другой точке, чем конец fullexpression. Первый контекст, когда конструктор по умолчанию называется [...]
Второй контекст - это когда ссылка привязана к временному. Временный, к которому ссылка связанных или временного, что является полным объектом подобъекта, к которому ссылка неизбежно сохраняется в течение всего срока ссылки, за исключением:
- Временных связанным с опорным элементом в -инициализатор т е р конструктор по [...]
- временная граница с опорным параметром в вызове функции (5.2.2) не сохраняется до завершения полного-экспрессии, содержащий вызов.
- [...]
5
сохраняется до завершения полного выражения, не содержащее вызов, который должен сказать:
const int &r = fun(5);
// <== no more 5
5 является Rvalue. Функция создаст для вас временную, но затем удалит ее после завершения функции. Так что да, это болтливая ссылка. –
Возможный почти дубликат http://stackoverflow.com/q/14735630/560648 –
@LightnessRacesinOrbit Почему «почти»? – Barry