16 Overloading [over]

16.5 Overloaded operators [over.oper]

16.5.5 Subscripting [over.sub]

operator[] должен быть нестатической функцией-членом с одним параметром. Он реализует синтаксис индексации

postfix-expression [ expr-or-braced-init-list ]

Таким образом, индексирующее выражение x[y] интерпретируется как x.operator[](y) объект класса x типа, T если он T​::​operator[](T1) существует и если оператор выбран как функция наилучшего соответствия механизмом разрешения перегрузки ([over.match.best]). [Example:

struct X {
  Z operator[](std::initializer_list<int>);
};
X x;
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

end example]