我阅读了有关命名空间定义的部分。N3797的第7.3.1条说:
仅当先前在该名称空间的原始名称空间定义中使用inline关键字时,才可以在扩展名称空间定义中使用inline关键字。
考虑以下代码片段:
namespace M
{
int h;
}
inline namespace M
{
int j = 6;
}
使用-std=c++11
和不使用该选项,编译成功。你能解释一下这种行为吗?是g++
虫子吗?
对该标准的引用很明确:这是不允许的。
使用Clang ++,我得到关于以下内容的非常清晰的错误消息:
Test0614-1.cpp:17:18: error: non-inline namespace cannot be reopened as inline
inline namespace M
^
Test0614-1.cpp:12:11: note: previous definition is here
namespace M
^
因此,这绝对是g ++中的错误。顺便说一句,它在这里报告:https : //gcc.gnu.org/bugzilla/show_bug.cgi?id=53402
编译器接受该标准的早期版本的内联名称空间并且至少没有警告的事实似乎是一个问题。在2010年,此错误已被报告为错误,应予以修复:https : //gcc.gnu.org/bugzilla/show_bug.cgi?id=43824
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句