必须将名称空间声明为inline
作为第一个,或者任何(重新打开的)名称空间在任何时候都可以声明为inline
吗?
如果是这样,有没有办法阻止某人将名称空间声明为inline
(之后)?
#include <iostream>
namespace outer {
//inline
namespace inner {
}}
//inline namespace std {}
namespace outer {
inline
namespace inner {
void foo() {
std::cout << "foo" << std::endl;
//::cout << "foo" << endl;
}
}}
int main() {
outer::foo();
}
修改
似乎gcc接受了这一点,因为我首先只测试了coliru,但clang rejects it
这是一个错误吗?
答案 0 :(得分:2)
7.3.1 / 7告诉我们必须在第一个声明中内联声明:
如果可选的初始内联关键字出现在 特定命名空间的命名空间定义,该命名空间是 声明为内联命名空间。可以使用内联关键字 扩展命名空间定义,仅在以前使用时才使用 该命名空间的原始命名空间定义。