内联命名空间是否必须始终如此限定?

Does an inline namespace have to be always qualified as such?

如果定义了命名空间 inline,是否还需要声明扩展命名空间 inline?换句话说,是否允许将命名空间声明为内联一次并在扩展声明中省略限定符?

我有机会请教最好的顾问-编译器(g++ 4.9.2) :)

所以我发现了什么:

不必将命名空间限定为内嵌在扩展定义中。命名空间的类型似乎在定义声明中是固定的(=编译器看到的第一个)。随后的限定条件将被忽略。因此,如果有人试图在扩展定义中内联命名空间,编译器不会给出任何特殊警告,而只会抱怨缺少 class/function 声明。

仍然取决于应用程序是否限定扩展命名空间。在我的例子中,这是没有必要的,因为继承确保了清晰的包含层次结构。如果不是这种情况,那么在头文件中限定内联命名空间可能仍然是个好主意,因为可能不知道哪个声明将是定义的。