// Error recovery: out-of-line constructors whose names have template arguments.
template<typenameT>X1<T>::X1<T>(int){}// expected-error{{out-of-line constructor for 'X1' cannot have template arguments}}
template<typenameT>(X1<T>::X1<T>)(float){}// expected-error{{out-of-line constructor for 'X1' cannot have template arguments}}
// Error recovery: out-of-line constructor names intended to be types
X0::X0X0::f1(){returnX0();}// expected-error{{qualified reference to 'X0' is a constructor name rather than a type wherever a constructor can be declared}}
structX0::X0X0::f2(){returnX0();}
template<typenameT>X1<T>::X1<T>X1<T>::f2(){}// expected-error{{qualified reference to 'X1' is a constructor name rather than a template name wherever a constructor can be declared}}
template<typenameT>X1<T>::X1<T>(X1<T>::f2)(int){}// expected-error{{qualified reference to 'X1' is a constructor name rather than a template name wherever a constructor can be declared}}