1// { dg-do assemble } 2 3// Origin: David Margery <David.Margery@irisa.fr> 4 5// Bug: We fail to set DECL_TEMPLATE_PARM_P when reducing template 6// parameter level. 7 8template <class T> class A2 { 9public: 10 A2() {} 11 virtual ~A2() {} 12 template <class other> A2 & operator=(const A2<other> o) { 13 i=o.i; 14 return *this; 15 } 16 T i; 17 T j; 18}; 19 20template <class T> class A1 { 21public: 22 A1() {} 23 virtual ~A1() {} 24 template <class other> A1 & operator=(const A1<other> o) { 25 i=o.i; 26 return *this; 27 } 28 template <class other> A1 & operator=(const A2<other> o) { 29 i=o.i; 30 return *this; 31 } 32 T i; 33}; 34 35template <template <class U> class T> class B { 36public: 37 B(){} 38 virtual ~B(){} 39 template <template <class U2> class O> struct rebind { typedef B<O> other ;}; 40 template <template <class U2> class O> B & operator=(const B<O> o) { 41 i=o.i; 42 return *this; 43 } 44 T<int> i; 45}; 46 47int main(int argc, char *argv[]) { 48 49 A1<int> a1; 50 A1<long> a2; 51 a1=a2; 52 53 B<A1 > b1; 54 B<A2 > b2; 55 b1=b2; 56 57 return 0; 58} 59