私はちょうど(5.2.1 [expr.sub]添字)N3291に変更がマークされていること、気づいた:新しいブレース-のinit-リストでoperator[]
をオーバーロードするためにOKだった、前C++ 0x: "operator []"の "braced-init-list"を禁止する理由は?
を:
struct X {
Z operator[](std::initializer_list<int>);
};
X x;
x[{1,2,3}] = 7; // OK: meaning x.operator[]({1,2,3})
今では削除であるとしてを置き換え:ブレース-INIT-リストがあってはならない
組み込みの添え字演算子と共に使用されます。
何が問題でしたか?
'x [{1,2,3}]'を見たときの私の最初の反応は、 "ええ、何?..."でした。たぶんそれが理由です。これは、基本的に、珍しいシンタックスと不明な数の引数を持つ 'operator []'を作成します( 'operator []'が1、2,3、または755のインデックスを取るのは概念的に意味がありますか?そして、ちょうどあなたを困惑させます:P – Damon
いいえ私はそれを見つけました:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3236.html#798 - 彼らはそれを移動しましたそれは奇妙な場所だったので。 – towi