结构标记、联合标记和枚举标记是否具有单独的命名空间?

iBu*_*Bug 2 c namespaces name-lookup

肖特的回答很好。他声称

  • 标签(结构、联合和枚举的名称)。

我认为结构、联合和枚举的标签具有不同的命名空间,因此这段代码完全没问题:

// In the same scope
struct T {};
union T {};
enum T {};
Run Code Online (Sandbox Code Playgroud)

但是从上面的引文推断,看起来所有标签都共享相同的命名空间。答案是不够清楚还是我错了?

P.P*_*.P. 5

不。

所有标签共享相同的命名空间。因此,您不得拥有:

struct T {...};
union T {...};
enum T {...};
Run Code Online (Sandbox Code Playgroud)

C11 草案 N1570,6.2.3 标识符的命名空间明确添加 s 脚注。

32)标签只有一个命名空间,尽管三个是可能的。