A Pascal array is just ones and zeros that behave like an array. So is a Fortran array.
> You can't index element two of std::array foo as 1[foo] since it isn't an actual C array.
That's just a silly quirk of C syntax that is deliberately not modeled in C++ operator overloading. It's not a real capability; it doesn't make arrays "do" anything new, so it' hard to call it an array behavior. It's a compiler behavior, that's for sure.
It could easily be added to C++, similarly to the way preincrement and postincrement are represented (which allows that obj++ and ++obj to be separate overloads).
T &array_class::operator [] (int index) {
// handles array[42]
}
T &array_class::operator [] (int index, int) { // Fictional!!
// handles 42[array]
}
The dummy extra
int parameter would mean "this overload of operator [] implements the flipped case, when the object is between the [ ] and the index is on the left".
C++ could easily have this; the technical barrier is almost nonexistent. (I wonder what the minimal diff against GNU C++ would be to get it going.)
I suspect that it's explicitly unwanted.