(prefix) __ for inclusion guards
There a good reason to do this, when the code is part of the implementation's library.
Using a name containing a __
is reserved for the implementation. It will not conflict with good user code.
Your user code should not do this.
17.6.4.3.2 Global names [global.names]
Certain sets of names and function signatures are always reserved to the implementation:
— Each name that contains a double underscore _ _ or begins with an underscore followed by an uppercase letter is reserved to the implementation for any use.
— Each name that begins with an underscore is reserved to the implementation for use as a name in the global namespace.