클래스 전문화 안에 불완전한 구조체를 선언하고 나중에 정의하는 데 문제가 있습니다.특수 클래스의 불완전한 구조체 정의
struct Foo {
template <bool Y, typename D>
struct Bar {};
template <typename D>
struct Bar<true, D> {
struct Qux;
};
template <typename D>
struct Bar<true, D>::Qux { int x; };
};
이 코드는 GCC에서 작동하지만, 그 소리 3.3 실패 : 코드가 (struct Foo
없이) 네임 스페이스 범위에 기록
r.cpp:42:26: error: non-friend class member 'Qux' cannot have a qualified name
struct Bar<true, D>::Qux { int x; };
~~~~~~~~~~~~~~^
경우, 너무 그 소리에서 작동합니다.
한편, struct Foo
이 템플릿으로 바뀌면 다음과 같이 gcc-4.7에서 코드가 깨집니다 (출시되지 않음). gcc-4.7에서 계속 작동합니다.
template <typename X>
struct Foo {
template <bool Y, typename D>
struct Bar {};
template <typename D>
struct Bar<true, D> {
struct Qux;
};
template <typename D>
struct Bar<true, D>::Qux { int x; };
};
연타가 실패합니다
r.cpp:43:26: error: template specialization or definition requires a template parameter list corresponding to the nested type 'Bar<true, type-parameter-1-0>'
struct Bar<true, D>::Qux { int x; };
^
r.cpp:43:26: error: non-friend class member 'Qux' cannot have a qualified name
struct Bar<true, D>::Qux { int x; };
~~~~~~~~~~~~~~^
2 errors generated.
GCC-4.9 유사한 오류와 함께 실패합니다 : 당신이 넣어하지만 선택의 여지가없는 것
r.cpp:43:26: error: too few template-parameter-lists
struct Bar<true, D>::Qux { int x; };
^
왜 설명 할 수 있습니까? –
-1 코드 만 있고 설명이없는 대답 은요? – Manu343726