// RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify %s // expected-no-diagnostics namespace std_example { int i; int f1(); int&& f2(); int &g(const int &); float &g(const int &&); int &j = g(i); float &k = g(f1()); float &l = g(f2()); int &g2(const int &); float &g2(int &&); int &j2 = g2(i); float &k2 = g2(f1()); float &l2 = g2(f2()); // FIXME: We don't support ref-qualifiers yet. #if 0 struct A { A& operator<<(int); void p() &; void p() &&; }; A& operator<<(A&&, char); A() << 1; A() << 'c'; A a; a << 1; a << 'c'; A().p(); a.p(); #endif } template struct remove_reference { typedef T type; }; template struct remove_reference { typedef T type; }; template struct remove_reference { typedef T type; }; namespace FunctionReferencesOverloading { template int &f(typename remove_reference::type&); template float &f(typename remove_reference::type&&); void test_f(int (&func_ref)(int)) { int &ir = f(func_ref); } }