1// { dg-do run  }
2// Origin: Ewgenij Gawrilow <gawrilow@math.TU-Berlin.DE>
3
4extern "C" void abort ();
5
6template <template <class X> class B, class A>
7struct is_instance_of {
8   enum { answer=false };
9};
10
11template <template <class X> class B, class T>
12struct is_instance_of<B, B<T> > {
13   enum { answer=true };
14};
15
16template <class X> struct C { };
17template <class X> struct D { };
18
19template <class T>
20bool is_C (const T&) {
21   return is_instance_of<C,T>::answer;
22}
23
24int main() {
25   if (!is_C(C<int>()))
26      abort ();
27   if (is_C(D<int>()))
28      abort ();
29   return 0;
30}
31