#if defined(__GNUC__) && ((__GNUC__ * 100 + __GNUC_MINOR__) < 407)
#define OLD_GNU
#endif

#ifdef OLD_GNU
template<int... Is>
struct Interface;
#endif

template<int I, int... Is>
struct Interface
#ifdef OLD_GNU
                <I, Is...>
#endif
{
  static int accumulate()
  {
    return I + Interface<Is...>::accumulate();
  }
};

template<int I>
struct Interface<I>
{
  static int accumulate()
  {
    return I;
  }
};

// Note: split this into a separate test if a
// cxx_variadic_template_template_parameters feature is added.

template<typename T>
struct eval {
  enum {
    Matched = 0
  };
};

template<template<typename...> class T, typename... U>
struct eval<T<U...> > {
  enum {
    Matched = 1
  };
};

template<typename...>
struct A {

};
template<typename T>
struct B {

};
template<typename T, typename U>
struct C {

};
template<typename T, typename U, typename...>
struct D {

};

// Note: This test assumes that a compiler supporting this feature
// supports static_assert. Add a workaround if that does not hold.
static_assert(eval<A<> >::Matched, "A Matches");
static_assert(eval<A<int> >::Matched, "A Matches");
static_assert(eval<A<int, char> >::Matched, "A Matches");
static_assert(eval<B<int> >::Matched, "B Matches");
static_assert(eval<C<int, char> >::Matched, "C Matches");
static_assert(eval<D<int, char> >::Matched, "D Matches");
static_assert(eval<D<int, char, bool> >::Matched, "D Matches");
static_assert(eval<D<int, char, bool, double> >::Matched, "D Matches");
