Jonathan Turkanis wrote in berlin.de:
Did I say 'helpful'? I said 'necessary': if (i) is correct, then it
constitutes necessary information for implementers.
My apologees, I should have consulted the standard when you first said:
I'm familiar with the language from the standard, but it sounds a bit
ambiguous:
"reserved to the implementation for use as a name in the global
namespace"
could mean:
(i) reserved to the implementation; also, must be global,
This section (17.4.3) is describing constraints on programmes.
However your rewording with hindsight appears to be as if your reading
the section as constraining implementation's.
What distinction are you trying to make? I don't see how a requirement
that such identifiers -- if used by an implementation -- must be
global, isn't a restriction.
Indeed, implementors arn't allowed to use _lowercase identifiers
other than in the global namespace (or in std).
I interpreted you originaly as suggesting *nobody* could use such
identifiers other than in the global namespace and only
implementors can use them there.
True, the standard tries to give
implementers broad discretion, yet it also puts quite a few
constraints on implementations.
Maybe you should try to find some evidence in favor of your
interpretation. I never said it was wrong, by the way. I just asked
you to support it.
There is only one peice evidence available, I presume since you
quoted from it, that you've read it. It helps if you read the all
of "17.4.3 Constraints on programs", here's the relevent quote:
17.4.3.1.2 Global names
1 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 (2.11) 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.165)
165) Such names are also reserved in namespace ::std (17.4.3.1).
The second bullet is clearly saying that implementation's can use
identifiers such as _lowercase at in the global namespace so
a conforming programme may not.
The note 165) tells us we can't put such identifiers in namespace std
but we can't do that anyway.
Rob.