19de54ea4SDouglas Gregor // RUN: %clang_cc1 -fsyntax-only -verify %s 2d1c91f17SDmitri Gribenko 39de54ea4SDouglas Gregor struct X0 { 49de54ea4SDouglas Gregor struct type { }; 59de54ea4SDouglas Gregor 69de54ea4SDouglas Gregor X0(); 79de54ea4SDouglas Gregor X0(int); 89de54ea4SDouglas Gregor (X0)(float); 99de54ea4SDouglas Gregor X0 (f0)(int); 109de54ea4SDouglas Gregor X0 (f0)(type); 119de54ea4SDouglas Gregor 129de54ea4SDouglas Gregor X0 f1(); 139de54ea4SDouglas Gregor X0 f1(double); 149de54ea4SDouglas Gregor }; 159de54ea4SDouglas Gregor X0()169de54ea4SDouglas GregorX0::X0() { } 179de54ea4SDouglas Gregor (X0::X0)(int) { } 189de54ea4SDouglas Gregor X0(X0::f0)199de54ea4SDouglas GregorX0 (X0::f0)(int) { return X0(); } 209de54ea4SDouglas Gregor 219de54ea4SDouglas Gregor template<typename T> 229de54ea4SDouglas Gregor struct X1 { 239de54ea4SDouglas Gregor struct type { }; 249de54ea4SDouglas Gregor 259de54ea4SDouglas Gregor X1<T>(); 269de54ea4SDouglas Gregor X1<T>(int); 279de54ea4SDouglas Gregor (X1<T>)(float); 289de54ea4SDouglas Gregor X1(float, float); 299de54ea4SDouglas Gregor (X1)(double); 309de54ea4SDouglas Gregor X1<T> (f0)(int); 319de54ea4SDouglas Gregor X1<T> (f0)(type); 329de54ea4SDouglas Gregor X1 (f1)(int); 339de54ea4SDouglas Gregor X1 (f1)(type); 349de54ea4SDouglas Gregor 359de54ea4SDouglas Gregor template<typename U> X1(U); 369de54ea4SDouglas Gregor X1 f2(); 379de54ea4SDouglas Gregor X1 f2(int); 389de54ea4SDouglas Gregor }; 399de54ea4SDouglas Gregor X1()409de54ea4SDouglas Gregortemplate<typename T> X1<T>::X1() { } 419de54ea4SDouglas Gregor template<typename T> (X1<T>::X1)(double) { } f1(int)429de54ea4SDouglas Gregortemplate<typename T> X1<T> X1<T>::f1(int) { return 0; } X1(X1<T>::f1)439de54ea4SDouglas Gregortemplate<typename T> X1<T> (X1<T>::f1)(type) { return 0; } 44d1c91f17SDmitri Gribenko 45*4e472b63SDmitri Gribenko class X2 { 46*4e472b63SDmitri Gribenko X2::X2(); // expected-error {{extra qualification on member 'X2'}} 47d1c91f17SDmitri Gribenko }; 48*4e472b63SDmitri Gribenko 49*4e472b63SDmitri Gribenko // We used to parse 'X3::X3' as a member function declaration. 50*4e472b63SDmitri Gribenko // DR 1435 and DR 1310 made this invalid. 51*4e472b63SDmitri Gribenko typedef int T1; 52*4e472b63SDmitri Gribenko struct X3 { 53*4e472b63SDmitri Gribenko X3::X3(T1()); // expected-error {{extra qualification on member 'X3'}} 54*4e472b63SDmitri Gribenko }; 55*4e472b63SDmitri Gribenko 56