CRTP와 함께 템플릿 템플릿 매개 변수를 사용하는 경우 파생 초기화 목록에서 기본 클래스 생성자를 호출 할 때 컴파일 오류가 발생합니다.clang ++ CRTP를 사용할 때 템플릿 템플릿 매개 변수 사용을 허용하지 않습니다.
문제는이 코드 조각으로 복제 할 수 있습니다
template <template<class> class Derived, class T>
struct base
{
};
template <class T>
struct derived : public base<derived, T>
{
derived()
: base<derived, T>()
{ }
};
기분을 상하게하는 오류 님에게 메일 :
이 문제는 그 소리 (3.4)에 일이 나타납니다bug.cpp:10:16: error: template argument for template template parameter must be a class template or type alias template
: base<derived, T>()
^
bug.cpp:10:11: error: expected class member or base class name
: base<derived, T>()
^
bug.cpp:10:11: error: expected '{' or ','
3 errors generated.
하지 g ++ (4.8, 4.7, 4.6). 나는 -std = C++ 11로 컴파일하고있다.
템플릿 템플릿 매개 변수와 함께 CRTP를 사용해야하는 것은 이번이 처음입니다. 나는이 일을 잘하고 clang ++의 문제인가?
나는 clang ++ 오류 메시지가 g ++ 이상으로 늦어졌습니다.
++ 11. 지금 삭제 된 답변에 대한 해결책을 제공 할 수 있습니다. –
@ DavidRodríguez-dribeas : 걱정 마세요. 새로운 표준은 여전히 자주 저를 놀라게합니다. –
나는 반대로 나는 배웠다. 나는 무언가를 배웠다. 나는 새로운 것을 배울 수없는 날을 걱정할 것입니다. –