// { dg-do assemble } // { dg-options "-O1" } // Origin: Jakub Jelinek <jakub@redhat.com> class Type; template<class E> class X { public: X<E>(); inline X<E>(int); inline ~X<E>(); }; template<class E> const Type &foo(const X<E> *); template<class E> inline X<E>::X(int x) { const Type &a = foo(this); } template<class E> inline X<E>::~X() { const Type &a = foo(this); } class Y { X<Type> a; public: Y(const X<Type> &x = X<Type>()); }; Y::Y(const X<Type> &x) : a(1) { }