From § 2.10.3.2:
Each identifier that begins with an underscore is reserved to the implementation for use as a name in the global namespace.
With that in mind, is this program standard conformant?  As it makes _1 etc available from the global namespace?  Or is it OK because std::placeholders is considered "implementation"?  Or is it OK because _1 isn't actually in the global namespace?  Something else?
using namespace std::placeholders;
int main(){}
                I think the program is fine. Strictly speaking, a using-directive does not put any names into a namespace - it makes the names reachable by name lookup, but does not actually make them members of the namespace enclosing the using-directive.
Quoting C++11, 7.3.4:
2 A using-directive specifies that the names in the nominated namespace can be used in the scope in which the using-directive appears after the using-directive. During unqualified name lookup (3.4.1), the names appear as if they were declared in the nearest enclosing namespace which contains both the using-directive and the nominated namespace. [ Note: In this context, “contains” means “contains directly or indirectly”. —end note ]
3 A using-directive does not add any members to the declarative region in which it appears. ...
Notice the language "can be used," "as if they were declared" etc. No mention of actually making a name member of a different namespace.
As for access through a qualified name, 3.4.3.2 (Qualified name lookup for namespaces) says:
2 For a namespace
Xand namem, the namespace-qualified lookup set S(X,m) is defined as follows: Let S'(X,m) be the set of all declarations ofminXand the inline namespace set ofX(7.3.1). If S'(X,m) is not empty, S(X,m) is S'(X,m); otherwise, S(X,m) is the union of S(Ni,m) for all namespaces Ni nominated by using-directives inXand its inline namespace set.
I.e., separate rules for using-directives as well.
I would conclude from this that a using-directive does not make any names members of a namespace, and thus the _ global namespace rules is not triggered and no Undefined Behaviour occurs.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With