C++11 標準の 93 ページ $5.1.2 を読んでいるときに、この場合に波括弧初期化リストを使用することは違法であると書かれていました: auto x=[]{return {1,2}} ; //エラー: ブレース初期化リストは式ではありません
そして、これら 2 つのトピックを見つけました。1 つは標準から、もう 1 つは N3681 提案からです。
Page397 $14.8.2.5: イニシャライザ リストの引数により、パラメータが非推定コンテキストと見なされます。$7.6.1.4: auto の出現箇所を新しく発明された型テンプレート パラメーター U に置き換えるか、初期化子が波括弧初期化リスト (8.5.4) の場合は std::initializer_list に置き換えます。
N3691 の提案では、「ブレースで初期化された auto をイニシャライザ リストに推論しないように変更し、ブレースで初期化された auto が複数の要素を持つ場合にブレースで初期化された auto を禁止する」ことを提案し、「ブレースを返すと、 list は式ではないため機能しません" http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3681.html
しかし、「ブレース初期化リストが式ではないのはなぜですか?」というトピックを見つけることができませんでした。これは、このトピックと同じ意味を持っている可能性があり ます。 しかし、C++ 委員会がこの種の文法は無価値であると結論付けた理由を彼が理解しようとしている間に、少し違いがありました。では、これには何か特別な理由があるのでしょうか。どうもありがとうございました。