I was told that #defining language keywords is undefined behaviour. How does this play with the following facts:
- Users can
#definenames that are not keywords in their code. - The language can get new keywords that used not to be keywords over time.
- Users should be able to compile old code with new compilers and get a compile-time diagnostic rather than undefined behaviour if any construct they used has ceased to be supported.
#3 is obviously my assumption but I consider this assumption essential as newer compilers tend to be better and "knowing the whole extent of the current law" is a theoretical legal assumption that does not apply to software developers, I hope (if the compiler assumed otherwise, it could replace any compile-time error in the code with whatever undefined behaviour it pleases).