template class A { T Obj; public: T element_type; A (T *); template A (A &&p1) { p1.Obj; } template A (A &); }; class B { public: B (A); }; A fn1 () { A a (new B (0)); return a; }