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 ]