// RUN: %clang_cc1 -fsyntax-only -verify %s struct X0 { struct type { }; X0(); X0(int); (X0)(float); X0 (f0)(int); X0 (f0)(type); X0 f1(); X0 f1(double); }; X0::X0() { } (X0::X0)(int) { } X0 (X0::f0)(int) { return X0(); } template<typename T> struct X1 { struct type { }; X1<T>(); X1<T>(int); (X1<T>)(float); X1(float, float); (X1)(double); X1<T> (f0)(int); X1<T> (f0)(type); X1 (f1)(int); X1 (f1)(type); template<typename U> X1(U); X1 f2(); X1 f2(int); }; template<typename T> X1<T>::X1() { } template<typename T> (X1<T>::X1)(double) { } template<typename T> X1<T> X1<T>::f1(int) { return 0; } template<typename T> X1<T> (X1<T>::f1)(type) { return 0; }