아래의 최소 예제는 gcc와 clang 및 Visual Studio에서도 작동하지만 icc에서는 컴파일되지 않는다는 것을 발견했습니다. 이 C++의 유효성 여부를 확인하려고하지만 여러 다른 개념이 결합되어 있으므로 내 질문에 대답하는 표준 관련 부분을 찾을 수 없습니다.가변 템플릿 템플릿 매개 변수에 기본 템플릿 매개 변수 사용
struct.cpp(12): error: too few arguments for template template parameter "F"
F<D> h;
detected during instantiation of class "G<D, F> [with D=char, F=C]" at line 17
이 유효한 C++인가 : ICC (16.0.3)와
// struct with multiple template parameters
template<typename A, typename B = int>
struct C
{
};
// struct that tries to use C's default second parameter without specifying it
template<typename D, template<typename E, typename ...> class F>
struct G
{
F<D> h;
};
int main()
{
G<char, C> i;
}
는, 컴파일은 다음과 같은 오류를 준다?
C
에는 F<D>
과 F = C
이 유효한 구조 여야한다는 의미에서 두 번째 템플릿 매개 변수의 기본값이 있으므로 내게 그렇게 보일 것 같습니다.
가능한 중복이 필요합니다 템플릿 템플릿 매개 변수를 사용할 때 기본 매개 변수를 명시 적으로 나열 하시겠습니까?] (http://stackoverflow.com/q/24017466/27678) – AndyG
'template class F' 템플릿을 사용해 보셨습니까? –
Yakk
@Yakk : 그럴 수 없습니다. 불행히도 문제를 해결하십시오. – ryan