у него в качестве отличительных особенностей C# обозначены индексаторы, и не сказано что ровно это же делается на С++ элементарной перегрузкой operator[].
Нет. Это - не "ровно это же".
Конечный результат то тот же самый. С точки зрения пользователя данного класса. Ну, иначе укажи на различия.
Синтаксический сахар под названием индексатор [] в C# возвращает копию переменной, а не саму переменную. Если переменная - структура, то есть шанс нарваться на чудеса.
Пусть есть struct Complex { public double x, y; }
и
Complex[] array; // массив этих структур с натуральным индексатором []
List<Complex> list; // список этих структур с сахарным индексатором []
Для натурального индексатора [] следующий код правильный:
array[j].x += 42;
array[j].y += 42;
А вот для сахарного индексатора [] следующий код не правильный
list[j].x += 42;
list[j].y += 42;
В случае сахарного индексатора [] сначала нужно получить копию всей переменной, а потом положить её обратно опять же целиком:
Complex tmp = list[j];
tmp.x += 42;
tmp.y += 42;
list[j] = tmp;