2

N3291 で変更がマークされていることに気付きました ( 5.2.1 添え字 [expr.sub] ):

以前は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})

これは削除され、次のものに置き換えられました。

ブレース初期化リストは、組み込み添え字演算子と一緒に使用してはなりません。

なにが問題だったの?

4

2 に答える 2

9

x[{1,2,3}]組み込み[]演算子ではありません。ユーザー定義の演算子関数を呼び出します。深呼吸して、この楽しい構文を使い続けてください。

于 2011-07-18T16:22:11.353 に答える
2

いくつかの慎重なグーグル検索により、問題 798が指摘されました。彼らはそれを13.5.5 [over.sub]に移動しただけで、削除しませんでした。

于 2011-07-18T15:03:22.497 に答える