10

以下 C++11 翻译单元格式正确吗?

typedef int T;
::T i;

如果是这样,它似乎与标准语法不匹配。

simple-type-specifier应该匹配,::T但语法是:

simple-type-specifier:
    nested-name-specifier_opt type-name

并且 anested-name-specifier不能::单独匹配,所以simple-type-specifier不能匹配::T

这是标准缺陷吗?

4

2 回答 2

13

这是规格缺陷。它在最新的草案N3691 (PDF) 中得到修复,其中嵌套名称说明符为:

nested-name-specifier:
    ::
    type-name ::
    namespace-name ::
    decltype-specifier ::
    nested-name-specifier identifier ::
    nested-name-specifier templateopt simple-template-id ::

(在 C++11 中,缺少第一个产生式 nested-name-specifier -> ::。)

于 2013-08-14T17:13:40.187 回答
1

So, in addition to the answer, merely as clarification: ::identifier refers to a (qualified) identifier in the global namespace. So yes, the code in question is actually well-formed.

于 2013-08-14T17:15:30.430 回答