イニシャライザが短命の右辺値参照を返す関数呼び出しである場合にのみ問題が発生します。より少ない単語とより多くのコードで:
// 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
右辺値参照ではなく値を返すので、問題はありません。
本当の危険は、右辺値参照パラメーターを持つ関数と関数テンプレートにあり、ライフタイムがそれらに依存するいくつかのサブオブジェクトのいずれかへの右辺値参照を返すと私は考えています。(そうは言っても、問題を示すのと同じくらい単純なものauto&& ref = std::move(42);
です!)
状況はC++11から完全に新しいものではありません、考慮してください:T const& ref = bar(T_factory());
。