작성
·
341
2
위와 같은 내용에서 typename 이 TypeAt 앞에 선언된 이유가 무엇인지 알 수 있을까요?
답변 1
7
A name used in a template declaration or definition and that is dependent on a template-parameter is assumed not to name a type unless the applicable name lookup finds a type name or the name is qualified by the keyword typename
.
요약하면, TypeAt<TypeList<Tail...>, index-1>::Result; 라고만 하면
이 Result가 타입을 의미하는건지, 아니면 값(멤버 변수)인지 컴파일러가 알지 못해 애매함이 생깁니다.
이런 모호함을 없애기 위해 표준에서 템플릿 인자에 의존적인 이름은
기본적으로 '타입'이 아닌 '값'으로 판정을 하고,
원래 의도가 타입을 지정하는거였다면
앞에다가 typename을 붙이게 되어 있습니다.