不允许将名称空间和同名的类放入一个声明区域,即
namespace A {}
class A{};
格式不正确(参见第 3.3.1/4 节)。但是,可以通过 using 指令引入任一名称:
namespace N { namespace A {int i;} }
struct A {static int i;};
using namespace N;
int i = A::i; // The global struct, or namespace N::A?
这段代码格式错误吗? VC++这么认为, 也Clang:
main.cpp:7:9: error: reference to 'A' is ambiguous
int i = A::i;
^
main.cpp:3:8: note: candidate found by name lookup is 'A'
struct A {static int i;};
^
main.cpp:1:25: note: candidate found by name lookup is 'N::A'
namespace N { namespace A {int i;} }
^
然而,海湾合作委员会接受.
谁是对的?
该代码格式不正确。抬头时A
,§7.3.4/6 步骤:
如果名称查找在两个不同的名称中找到名称声明
命名空间,并且声明不声明相同的实体并且不声明
未声明函数,使用的名称格式不正确。
这里的命名空间是全局命名空间N
,实体是命名空间N::A
和班级::A
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)