// 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 struct X1 { struct type { }; X1(); X1(int); (X1)(float); X1(float, float); (X1)(double); X1 (f0)(int); X1 (f0)(type); X1 (f1)(int); X1 (f1)(type); template X1(U); X1 f2(); X1 f2(int); }; template X1::X1() { } template (X1::X1)(double) { } template X1 X1::f1(int) { return 0; } template X1 (X1::f1)(type) { return 0; } class X2 { 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. typedef int T1; struct X3 { X3::X3(T1()); // expected-error {{extra qualification on member 'X3'}} };