1// RUN: %clang_cc1 -fsyntax-only -verify %s
2struct X0 {
3  struct type { };
4
5  X0();
6  X0(int);
7  (X0)(float);
8  X0 (f0)(int);
9  X0 (f0)(type);
10
11  X0 f1();
12  X0 f1(double);
13};
14
15X0::X0() { }
16(X0::X0)(int) { }
17
18X0 (X0::f0)(int) { return X0(); }
19
20template<typename T>
21struct X1 {
22  struct type { };
23
24  X1<T>();
25  X1<T>(int);
26  (X1<T>)(float);
27  X1(float, float);
28  (X1)(double);
29  X1<T> (f0)(int);
30  X1<T> (f0)(type);
31  X1 (f1)(int);
32  X1 (f1)(type);
33
34  template<typename U> X1(U);
35  X1 f2();
36  X1 f2(int);
37};
38
39template<typename T> X1<T>::X1() { }
40template<typename T> (X1<T>::X1)(double) { }
41template<typename T> X1<T> X1<T>::f1(int) { return 0; }
42template<typename T> X1<T> (X1<T>::f1)(type) { return 0; }
43