// DR 2303
// PR c++/97453
// { dg-do compile { target c++11 } }
template <typename... T> struct A;
template <> struct A<>
{
};
template <typename T, typename... Ts> struct A<T, Ts...> : A<Ts...>
{
};
struct B : A<int, int>
{
};
struct C : A<int, int>, A<int> //  { dg-warning "direct base .A<int>. inaccessible in .C. due to ambiguity" }
{
};
struct D : A<int>, A<int, int> //  { dg-warning "direct base .A<int>. inaccessible in .D. due to ambiguity" }
{
};
template <typename... T>
void
f (const A<T...> &)
{
  static_assert (sizeof...(T) == 2, "it should duduce to A<int,int>");
}
void
g ()
{
  f (B{});
  f (C{});
  f (D{});
}