c++ Default template argument

voider의 이미지

template < typename T, typename T_INT = T::INT >
class T_int{
    T_INT a;
};

이코드는 VC 7.1 에서 잘 돌아가거든요...
근데 g++에선 되질 않네요
클라이언트 코드가
T_int<have_Int_type> t; // have_int_type 에는 INT라는 타입이 정의되어있다

이와 같다면 이것은 컴파일 되는게 합당하지 않을까요????
제가 잘못한것인지 다른 사용법이 있는건지
g++은 지원하지 않는건지 도 모르겠네요!![/code]
singlet의 이미지

표준에서는, 해당 템플릿 선언에 등장하는 T::INT 가 과연 타입인지 변수인지 컴파일러로서는 알 수도 없고 알아서도 안 된다고 들었습니다. (제가 맞게 알고 있다면 VC++ 7.1 이 비표준인 것이지요)

제 생각으로는 T::INT 가 변수가 아닌 타입임을 알려주기 위해서는 typename 을 한 번 더 사용하여

template<typename T, typename T_INT = typename T::INT>

라고 해야 할 것 같습니다. 이 쪽은 g++ 3.2.2 에서 컴파일됩니다.
voider의 이미지

맞습니다...
역시 제가 개떡같이 알고 있었군요....
감사합니다....

typename이 그런 용도로 사용되는건지도 모르고 사용했었군요...

-- 아쉬운 하루 되세요 --