// RUN: %clang_cc1 -fsyntax-only -verify %s
structX0{structtype{};X0();X0(int);(X0)(float);X0(f0)(int);X0(f0)(type);X0f1();X0f1(double);};X0::X0(){}(X0::X0)(int){}X0(X0::f0)(int){returnX0();}template<typename T>structX1{structtype{};
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);X1f2();X1f2(int);};template<typename T> X1<T>::X1(){}template<typename T>(X1<T>::X1)(double){}template<typename T> X1<T>X1<T>::f1(int){return0;}template<typename T> X1<T>(X1<T>::f1)(type){return0;}classX2{X2::X2();// expected-error {{extra qualification on member 'X2'}}
};// We used to parse 'X3::X3' as a member function declaration.
// DR 1435 and DR 1310 made this invalid.
typedefintT1;structX3{X3::X3(T1());// expected-error {{extra qualification on member 'X3'}}
};