You ask about the rationale. Here’s one possible reason, not necessarily the one that most influenced the Visual C++ team:
- Those are valid identifiers in C.
- Microsoft’s recommendation has long been to use C++ mode for both C and C++ code, rather than maintaining a modern C compiler.
- Valid C code using these as identifiers would gratuitously break if they were compiled as keywords.
- People trying to write portable C++ are mostly using
/Zafor maximum conformance anyway, which will cause these to be treated as keywords.
- The workaround to treat them as keywords in
/Zeby including a header file is easy and portable. (G++’s workaround
-fno-operator-namesisn’t bad either, but putting the option in the source code rather than the build system is somewhat nicer.)