Local function declaration inside namespace

后端 未结 2 1414
旧巷少年郎
旧巷少年郎 2021-01-05 01:35

In such a situation

namespace n {
    void f() {
        void another_function();
    }
}

Should the function another_function

相关标签:
2条回答
  • 2021-01-05 01:45

    C++11 3.5 (as well as C++03)

    7 When a block scope declaration of an entity with linkage is not found to refer to some other declaration, then that entity is a member of the innermost enclosing namespace. However such a declaration does not introduce the member name in its namespace scope.

    The declaration in your example declares n::another_function.

    0 讨论(0)
  • 2021-01-05 01:46

    According to N3485 7.3.1 [namespace.def]/6, the correct answer is n::another_function.

    The enclosing namespaces of a declaration are those namespaces in which the declaration lexically appears, except for a redeclaration of a namespace member outside its original namespace (e.g., a definition as specified in 7.3.1.2). Such a redeclaration has the same enclosing namespaces as the original declaration. [ Example:

    namespace Q {
        namespace V {
            void f(); // enclosing namespaces are the global namespace, Q, and Q::V
            class C { void m(); };
        }
        void V::f() { // enclosing namespaces are the global namespace, Q, and Q::V
            extern void h(); // ... so this declares Q::V::h
        }
        void V::C::m() { // enclosing namespaces are the global namespace, Q, and Q::V
        }
    }
    

    —end example ]

    0 讨论(0)
提交回复
热议问题