命名空间声明为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拒绝它。
这是个虫子吗?
发布于 2015-03-25 17:13:57
7.3.1/7向我们表明,必须在第一次声明时内联宣布:
如果可选的初始内联关键字出现在特定名称空间的命名空间定义中,则该名称空间被声明为内联命名空间。内联关键字只能在扩展名称空间定义中使用,前提是它以前用于该名称空间的原始命名空间定义。
https://stackoverflow.com/questions/29261910
复制相似问题