C++11 標準の 12.2 では:
参照がバインドされている一時オブジェクト、または参照がバインドされているサブオブジェクトの完全なオブジェクトである一時オブジェクトは、次の例外を除き、参照の存続期間中持続します。
コンストラクターの ctor-initializer (12.6.2) の参照メンバーへの一時的なバインドは、コンストラクターが終了するまで持続します。
関数呼び出し (5.2.2) の参照パラメーターへの一時的なバインドは、呼び出しを含む完全な式が完了するまで持続します。
関数 return ステートメント (6.6.3) の戻り値に一時的にバインドされているものの有効期間は延長されません。一時的なものは、return ステートメントの完全な式の最後で破棄されます。
new-initializer (5.3.4) の参照への一時的なバインドは、new-initializer を含む完全な式が完了するまで持続します。
そして、標準の最後のケースの例があります:
struct S {
int mi;
const std::pair<int,int>& mp;
};
S a { 1,{2,3} }; // No problem.
S* p = new S{ 1, {2,3} }; // Creates dangling reference
私にとっては、2. and 3.
理にかなっていて同意しやすい. しかし、bebind の理由は何1. and 4.
ですか? この例は私には悪に見えます。