10

次の C++11 翻訳単位は整形式ですか?

typedef int T;
::T i;

もしそうなら、それは標準的な文法と一致していないようです.

simple-type-specifierと一致するはず::Tですが、文法は次のとおりです。

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

と aだけでnested-name-specifierは一致しないため、 と一致することはできません。::simple-type-specifier::T

これは標準的な欠陥ですか?

4

2 に答える 2

13

これは仕様上の欠陥です。これは、最新のドラフトN3691 (PDF) で修正されています。ここで、nested-name-specifierは次のとおりです。

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

したがって、答えに加えて単に明確化として::identifier、グローバル名前空間の(修飾された)識別子を参照します。そうです、問題のコードは実際には整形式です。

于 2013-08-14T17:15:30.430 に答える