2010-05-06 5 views
2

우리는 비슷한을 발견 다음 (... 요구하지 않음) :글로벌 자격

흥미롭게
namespace N { 
    struct A { struct B; }; 
} 

struct A { struct B; }; 

using namespace N; 

struct ::A::B {}; // <- point of interest 

이 온라인 VS2005, ICC 11.1 꼬모 (미세 컴파일)하지만, GCC와 함께 실패 GCC를 잘처럼

클래스 이름의

글로벌 자격 전에 무효 '{'토큰

C++ 03에서, 부속서 A는이 날 것으로 보인다 :

  • class-headnested-name-specifier들로 구성 할 수 있으며 identifier
  • nested-name-specifier 분명히 글로벌 자격 (::)
  • 로 시작할 수 없습니다, 어느 쪽도 identifier

수 ... 또는 내가 내려다 오전 어떤 것?

+0

VS2005를 사용하는 코스에서는 파와 비슷한 소리가납니다. – wheaties

답변

6

GCC는이 경우 편지에 표준을 구현하는 반면, 다른 사람들은 덜 엄격하게 구현합니다 (issue #355을보십시오).

당신은 해결 방법을 구문

struct identity<::A>::type::B {}; 

의 한계 다음을 수행 할 수 또는 당신은 명시 적으로는 물론, 당신은 using namespace의 순서를 교환, typedef

typedef ::A AHidden; 
struct AHidden::B { }; 

이름 또는 사용 및 중첩 된 클래스 정의 Annex A는 유익한 정보 임에 유의하십시오. 표준 문안은 5.1/79에 있습니다.

+0

감사합니다, 그리고 모두 내가 필요했습니다 :) –

+0

완벽! :)) ..... –