C++ Primer says:
The identifier we define in our programs may not contain 2 consecutive
underscores, nor can identifier begin with an underscore followed
immediately by an uppercase letter. In addition, identifiers be fined
outside of a function may not begin with an underscore
All is well, but
int _c = 55; // outside function starts with _
int main () {
int _A = 12; // _ followed by uppercase letter
cout << _A << endl;
int __b__ =33; // 2 consecutive __
cout << __b__ << endl;
cout << _c << endl;
}
Code above compiles perfectly fine on mac, g++ 4.7.1, using the following flags
g++ -pedantic -Wall -Werror -std=c++11 -O3 -funroll-loops -fprefetch-loop-arrays
What am i missing please?
Nothing. The identifiers with a leading underscore followed by an uppercase letter and identifiers with two underscores are merely reserved.
Your compiler vendor might decide to use them at any time (for instance, it’s perfectly fine for a compiler vendor to use _A as a keyword) and hence you should not use them. Often, the standard library is implemented using reserved identifiers, hence they do not result in a compile error.