C++ 0x:为什么禁止"operator []"中的"braced-init-list"?

tow*_*owi 2 arrays curly-braces initializer-list c++11

我刚注意到,在N3291中标记了一个更改(5.2.1 Subscripting [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})
Run Code Online (Sandbox Code Playgroud)

现在删除并替换为:

braced-init-list不能与内置的下标运算符一起使用.

出了什么问题?

Joh*_*itb 9

x[{1,2,3}]不是内置的[]运营商.它调用用户定义的操作符函数.所以深吸一口气,继续使用这个有趣的语法.