2011-08-22 3 views
0

시점부터 2003 년 C++ 03 문서 :n3290 : 정교한 형식 지정자 구문이 변경 되었습니까?

정교 형식 지정자 : 섹션 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) 지원 이전 구문에 문제가 무엇인지 유형 이름은 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 C++ 정말 컴파일러 (.../다음이 규칙을 folling되지 않는다는 것을 알고있다 이 C에서 허용되지 않는 이유 위의 점 3.4.4/1

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

+ +0 오는 경우 컴파일러는 이러한 변경)

3)를 지원합니다.

하나만 설명해주세요. 하나만 설명해주세요.

(IAM은 C + +0 태그를 추가하려고 할 때 그것은 어떤 일 개 ..Add C + +0 태그를 ..please ..tagging되지 않는 이유는 무엇입니까?)

답변

1
  1. 이것은 간단한 구조 조정이다. typename-specifier은 이제 종류가 elaborated-type-specifier이 아니지만 모두 trailing-type-specifier입니다.
  2. 컴파일러에서해야 할 일이 명확하지 않습니다. 올바른 C++ 0x 코드가 아닌 유효한 C++ 03 코드를 생각해 볼 수 있습니까?
  3. 정확히 C++ 0x에서 허용되지 않는 것은 무엇입니까? 문법에 따르면 정규화 된 ID가 nested-name-specifier_opt identifier으로 허용됩니다.