2011-08-22 17 views
0

點從2003年C++ 03文件:n3290:Elaborated類型說明符語法已更改?

闡述類型指示符:3.4.4節,第1段:

 "An elaborated-type-specifier may be used to refer to a 
     previously declared class-name or enum-name even though 
     the name has been hidden by a non-type declaration. **The 
     class-name or enum-name in the elaborated-type-specifier 
     may either be a simple identifier or be a qualified-id.**" 

但在n3290草案他們改變了闡述類型說明符(7.1 .6.3)

7.1.6.3:闡述類型說明符

elaborated-type-specifier: 
    class-key attribute-specifier-seqopt nested-name-specifieropt identifier 
    class-key nested-name-specifieropt templateopt simple-template-id 
    enum nested-name-specifieropt identifier 

可我知道

1)什麼是早期的語法支持的問題類型名C++ 03

 7.1.5.3 Elaborated type specifiers 

elaborated-type-specifier: 
     class-key ::opt nested-name-specifieropt identifier 
     class-key ::opt nested-name-specifieropt templateopt template-id 
     enum ::opt nested-name-specifieropt identifier 
     typename ::opt nested-name-specifier identifier 
     typename ::opt nested-name-specifier templateopt template-id 

2)是真正的編譯器是以下/不folling這一規則...(這編譯器支持這種變化)

3)當即將上述點3.4.4 /第一

 The class-name or enum-name in the elaborated-type-specifier 
     may either be a simple identifier or be a qualified-id 

爲什麼它不是在C++允許0X。

請有人解釋一下嗎? 請有人解釋一下嗎?

(IAM時試圖添加的C++ 0x TAG它不..tagging ..please任何一個..Add的C++ 0x的標籤?)

回答

1
  1. 這是一個簡單的重組。 typename-specifier現在不是一種elaborated-type-specifier,但它們都是trailing-type-specifier
  2. 目前尚不清楚編譯器應該做什麼。你能想到有效的C++ 03代碼不是有效的C++ 0x嗎?
  3. 究竟是不是在C++ 0x允許的?語法表示允許有合格的ID,如nested-name-specifier_opt identifier