12 Overloading [over]

12.4 Overloaded operators [over.oper]

12.4.5 Subscripting [over.sub]

A subscripting operator function is a function named operator[] that is a non-static member function.
For an expression of the form the operator function is selected by overload resolution ([over.match.oper]).
If a member function is selected, the expression is interpreted as
postfix-expression . operator [] ( expression-list )
[Example 1: struct X { Z operator[](std::initializer_list<int>); Z oeprator[](auto...); }; X x; x[{1,2,3}] = 7; // OK, meaning x.operator[]({1,2,3}) x[1,2,3] = 7; // OK, meaning x.operator[](1,2,3) int a[10]; a[{1,2,3}] = 7; // error: built-in subscript operator a[1,2,3] = 7; // error: built-in subscript operator — end example]