是否明确定义将带有`using`的`_ [a-z0-9]`开头的标识符导入全局命名空间?

时间:2017-08-20 16:01:44

标签: c++ language-lawyer

整个问题符合标题。

C ++ 14 [global.names]说

  

以下划线开头的每个名称都保留给实现,以用作全局名称空间中的名称。

但如果关注

,我并不完全清楚
namespace N
{
    void _foo() {}
}

using N::_foo;

违反了规则。

1 个答案:

答案 0 :(得分:2)

难道不是很明显吗?您的代码将以下划线开头的名称放入全局命名空间,其中此类名称保留供实现使用。不要这样做。如果实现在全局命名空间中有_foo,则会产生冲突。