命名空间内的本地函数声明

Set*_*gie 7 c++ namespaces function-declaration

在这种情况下

namespace n {
    void f() {
        void another_function();
    }
}
Run Code Online (Sandbox Code Playgroud)

该函数another_function应该在命名空间内n还是外部定义?VS 2012(11月CTP)表示应该在外面,Mac上的GCC 4.7.2表示应该在里面.如果我做错了,我会从链接器中得到未定义的符号错误.

我一般都相信GCC更符合标准,但这是C++,你永远不能确定.

AnT*_*AnT 11

C++ 11 3.5(以及C++ 03)

7当找不到具有链接的实体的块范围声明来引用其他声明时,该实体是最内层封闭命名空间的成员.但是,此类声明不会在其命名空间范围中引入成员名称.

您的示例中的声明声明n::another_function.