------- Comment #5 from rbuergel at web dot de 2008-01-29 10:17 ------- for #3, using static_assert( Comp<T...>::value > 0, "" ); makes it work.
using max<T, Params...> for #1 leads gcc to an error: "cannot expand 'Params ...' into a fixed-length argument list" updated testcase: template<typename T, T a, T... Params> struct max { static const T value = a > max<T, Params...>::value ? a : max<T, Params...>::value; }; template<typename T, T a, T b> struct max<T, a, b> { static const T value = a > b ? a : b; }; static const int value1 = max< int, 1, 2>::value; static const int value2 = max< int, 1, 3, 5>::value; If there are no more errors in thats code, this is a rejects-valid, not an error-recovery -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34219