explicit specialization in non-namespace scope... 에러가 납니다.

freetbet의 이미지

namespace A { namespace B { namespace C {
 
template<USHORT paramA, USHORT param B>
class X {
...
 
private:
 
   template<USHORT paramC> static BOOL isType(){return FALSE;}
   template<> static BOOL isType<fillType>(){return TRUE;} // fillType은 앞서 정의돼 있습니다.
....
};

이런 코드에서 두 번째
template<>...

라인에서

explicit specialization in non-namespace scope 'class A::B::C::D::isType'

라고 에러가 뜹니다. VC++2008 에서 이상없이 빌드된 코드인데, gcc에서는 안되는군요.

템플릿 특화와 관계된 것 같은데 namespace, 템플릿, static 멤버 함수까지 겹쳐져서 어떻게 해결해야 할지 모르겠습니다. ㅠ.ㅠ

yielding의 이미지

VC++의 버그입니다

14882-2003 §14.7.3/2에 보면
explicit specializations have to be at namespace scope.

isType이 속한 namespace를 앞에 붙여주면 되겠네요.

Life rushes on, we are distracted