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