Identifiers with two initial underscores or an initial underscore followed by an uppercase letter are reserved globally for use by the compiler.
Identifiers that begin with an underscore are reserved as identifiers with
file scope in both the ordinary and tag name spaces.
C++ extends the C reservations to include more identifiers in a larger name
space. Any name that contains double underscores anywhere is
reserved. Any identifier that begins with an underscore is reserved in
the global namespace.
Related References