C++11 declaration `::T i`?

C++11 declaration `::T i`?

本文关键字:C++11 declaration      更新时间:2023-10-16

下面的C++11翻译单元是否形成良好?

typedef int T;
::T i;

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

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

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

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

这是标准缺陷吗?

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

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

(在C++11中,缺少第一个产品,嵌套名称说明符->::。)

因此,除了答案之外,仅作为澄清:::identifier指的是全局命名空间中的(限定的)标识符。所以是的,有问题的代码实际上是格式良好的