This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21 Core Issues List revision 112e. See http://www.open-std.org/jtc1/sc22/wg21/ for the official list.
[Moved to DR at the November, 2014 meeting.]
The section of the Standard reserving names that begin with two underscores or an underscore and a capital letter, _N4140_.22.214.171.124.2 [global.names], applies only to “programs that use the facilities of the C++ standard library” (126.96.36.199 [constraints.overview]). However, implementations rely on this restriction for mangling, even when no standard library facilities are used. Should this requirement be moved to the core language section?
(There is a related issue with user-defined literal suffixes, 188.8.131.52.6 [usrlit.suffix]. However, these are already mentioned normatively in the core language section, so it could be argued that the question of library usage does not apply.)
Proposed resolution (October, 2014):
Change 5.10 [lex.name] paragraph 3 as follows:
In addition, some identifiers are reserved for use by C++ implementations
and standard libraries (_N4140_.184.108.40.206.2 [global.names])and shall not be used otherwise; no diagnostic is required.
Change the footnote in 9.5.1 [dcl.fct.def.general] paragraph 8 as follows:
[Footnote: Implementations are permitted to provide additional predefined variables with names that are reserved to the implementation (
_N4140_.220.127.116.11.2 [global.names]). If a predefined variable is not odr-used (6.3 [basic.def.odr]), its string value need not be present in the program image. —end footnote]
Change the example in 12.6 [over.literal] paragraph 8 as follows:
double operator""_Bq(double); // OK: does not use the reserved
name_Bq ( _N4140_.18.104.22.168.2 [global.names]) double operator"" _Bq(double); // uses the reserved name_Bq ( _N4140_.22.214.171.124.2 [global.names])
Delete _N4140_.126.96.36.199.2 [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 (5.11 [lex.key]) 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.