I am trying to take a program that works on Win32 and build it on Linux. An enum with a field named "Always" is failing to compile with a strange error. With a sinking suspicion, I look in the system headers and discover that /usr/include/X11/X.h is #defining "Always" to 2.
The Open Group, what the hell??? I don't suppose X11 has an equivalent of #define WIN32_LEAN_AND_MEAN #define NOMINMAX does it … :(
Have I ever mentioned how much I hate the C preprocessor? It poisons everything built on top of it, you make modern code with namespaces and such and it gets broken by the pre-namespace #defines in your thirty year old OS header files. You're building skyscrapers on sand. A significant portion of why I want to jump to Rust or Go is just to get away from the C preprocessor by itself