The following valid code snippet triggers an ICE on mainline:
============================================================
template<typename...> struct A;
template<template<int...> class T> struct A<T<0> > {};
template<int> struct B;
A<B<0> > a;
============================================================
bug.cc:7: internal compiler error: tree check: expected class 'expression',
have 'constant' (integer_cst) in unify, at cp/pt.c:12796
Please submit a full bug report, [etc.]
A similar testcase generates a slightly different error message:
============================================================
template<typename...> struct A;
template<template<typename...> class T> struct A<T<int> > {};
template<typename> struct B;
A<B<int> > a;
============================================================
bug.cc:7: internal compiler error: tree check: expected class 'expression',
have 'type' (integer_type) in unify, at cp/pt.c:12796
Please submit a full bug report, [etc.]
--
Summary: [4.3 regression] ICE with specialization of variadic
template
Product: gcc
Version: 4.3.0
Status: UNCONFIRMED
Keywords: ice-on-valid-code, monitored
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: reichelt at gcc dot gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32565