Это всегда проблематично только в том случае, когда инициализатор является вызовом функции, который возвращает недолговечную ссылку rvalue. Меньше слов и больше кода:
// Fine; lifetime extension applies!
auto&& ref = 42;
auto id = [](int&& i) -> int&& { return std::move(i); };
auto&& uhoh = id(42);
// uhoh is now a stale reference; can't touch it!
Напротив, auto uhoh = id(42);
сработало бы нормально.
В вашем случае, поскольку std::make_tuple
возвращает значение, а не ссылку на rvalue, проблем нет.
Я придерживаюсь мнения, что реальная опасность исходит от тех функций и шаблонов функций со ссылочными параметрами rvalue, которые возвращают ссылку rvalue на те из некоторых подобъектов, от которых зависит время жизни. (При этом такая простая вещь, как auto&& ref = std::move(42);
, демонстрирует проблему!)
Ситуация не совсем нова для C++11, учтите: T const& ref = bar(T_factory());
.
person
Luc Danton
schedule
13.02.2013
auto&& var = func()
, stackoverflow.com/questions/13618506/ - person billz   schedule 13.02.2013const int & foo() { return 42; } int i = foo();
иint foo() { return 42; } const int & i = foo();
- это одни и те же ситуации (это не так). - person Luc Touraille   schedule 13.02.2013