아래의 두 템플릿 선언문에 쓰인 class와 typename의 차이점은 무엇일까?

template<class T> class Widget;

templat<typename T> class Widget

이 둘은 차이가 없다. 템플릿의 타입 매개변수를 선언 할 때는

class와 typename의 뜻이 완전히 똑같다. 


하지만 중첩 의존 타입 이름을 식별하는 용도에는 반드시 typename을 사용 한다.

단, 중첩 의존 이름이 기본 클래스 리스트에 있거나 멤버 초기화 리스트 내의 기본 클래스 식별자로 있

는 경우는 예외이다.

template<typename C>                        // typename 쓸수있음(class와 같은 의미)

void f( const C& container,                  // typename 쓰면 안됨

    typename C::iterator iter );         // typename 꼭 써야함.