qualified-id-lookup.cpp revision 44b4321feab46299d3f5cfd404680884752a0fcf
144b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor// RUN: clang -fsyntax-only -verify %s
244b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor
344b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregornamespace Ns {
444b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  int f(); // expected-note{{previous declaration is here}}
544b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor}
644b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregornamespace Ns {
744b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  double f(); // expected-error{{functions that differ only in their return type cannot be overloaded}}
844b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor}
944b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor
1044b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregornamespace Ns2 {
1144b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  float f();
1244b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor}
1344b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor
1444b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregornamespace Ns2 {
1544b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  float f(int); // expected-note{{previous declaration is here}}
1644b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor}
1744b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor
1844b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregornamespace Ns2 {
1944b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  double f(int); // expected-error{{functions that differ only in their return type cannot be overloaded}}
2044b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor}
2144b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor
2244b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregornamespace N {
2344b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  int& f1();
2444b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor}
2544b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor
2644b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregornamespace N {
2744b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  struct f1 {
2844b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor    static int member;
2944b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  };
3044b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor
3144b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  void test_f1() {
3244b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor    int &i1 = f1();
3344b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  }
3444b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor}
3544b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor
3644b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregornamespace N {
3744b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  float& f1(int);
3844b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor
3944b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  struct f2 {
4044b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor    static int member;
4144b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  };
4244b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  void f2();
4344b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor}
4444b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor
4544b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregorint i1 = N::f1::member;
4644b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregortypedef struct N::f1 type1;
4744b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregorint i2 = N::f2::member;
4844b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregortypedef struct N::f2 type2;
4944b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor
5044b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregorvoid test_f1(int i) {
5144b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  int &v1 = N::f1();
5244b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor  float &v2 = N::f1(i);
5344b4321feab46299d3f5cfd404680884752a0fcfDouglas Gregor}
54