Everything starting with an underscore is for the compiler. A single underscore is reserved for global identifiers, meaning you may give locals, class members and elements within namespaces such names, but not top-level globals, constants of top-level enums, or macros. And I'd advise against the allowed cases, too.
A double underscore or an underscore followed by an upper-case letter is completely reserved. The compiler may define macros, extension keywords and whatever else it wants with such names, thus making them unsafe to use for you in any context.