| // { dg-do assemble } |
| |
| // Origin: David Margery <David.Margery@irisa.fr> |
| |
| // Bug: We fail to set DECL_TEMPLATE_PARM_P when reducing template |
| // parameter level. |
| |
| template <class T> class A2 { |
| public: |
| A2() {} |
| virtual ~A2() {} |
| template <class other> A2 & operator=(const A2<other> o) { |
| i=o.i; |
| return *this; |
| } |
| T i; |
| T j; |
| }; |
| |
| template <class T> class A1 { |
| public: |
| A1() {} |
| virtual ~A1() {} |
| template <class other> A1 & operator=(const A1<other> o) { |
| i=o.i; |
| return *this; |
| } |
| template <class other> A1 & operator=(const A2<other> o) { |
| i=o.i; |
| return *this; |
| } |
| T i; |
| }; |
| |
| template <template <class U> class T> class B { |
| public: |
| B(){} |
| virtual ~B(){} |
| template <template <class U2> class O> struct rebind { typedef B<O> other ;}; |
| template <template <class U2> class O> B & operator=(const B<O> o) { |
| i=o.i; |
| return *this; |
| } |
| T<int> i; |
| }; |
| |
| int main(int argc, char *argv[]) { |
| |
| A1<int> a1; |
| A1<long> a2; |
| a1=a2; |
| |
| B<A1 > b1; |
| B<A2 > b2; |
| b1=b2; |
| |
| return 0; |
| } |