// 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<typename T> struct remove_reference { typedef T type; }; template<typename T> struct remove_reference<T&> { typedef T type; }; template<typename T> struct remove_reference<T&&> { typedef T type; }; namespace FunctionReferencesOverloading { template<typename T> int &f(typename remove_reference<T>::type&); template<typename T> float &f(typename remove_reference<T>::type&&); void test_f(int (&func_ref)(int)) { int &ir = f<int (&)(int)>(func_ref); } }