p3-0x.cpp revision 762bb9d0ad20320b9f97a841dce57ba5e8e48b07
1// RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify %s 2namespace std_example { 3 int i; 4 int f1(); 5 int&& f2(); 6 int &g(const int &); 7 float &g(const int &&); 8 int &j = g(i); 9 float &k = g(f1()); 10 float &l = g(f2()); 11 12 int &g2(const int &); 13 float &g2(int &&); 14 int &j2 = g2(i); 15 float &k2 = g2(f1()); 16 float &l2 = g2(f2()); 17 18 // FIXME: We don't support ref-qualifiers yet. 19#if 0 20 struct A { 21 A& operator<<(int); 22 void p() &; 23 void p() &&; 24 }; 25 26 A& operator<<(A&&, char); 27 A() << 1; 28 A() << 'c'; 29 A a; 30 a << 1; 31 a << 'c'; 32 A().p(); 33 a.p(); 34#endif 35} 36 37template<typename T> 38struct remove_reference { 39 typedef T type; 40}; 41 42template<typename T> 43struct remove_reference<T&> { 44 typedef T type; 45}; 46 47template<typename T> 48struct remove_reference<T&&> { 49 typedef T type; 50}; 51 52namespace FunctionReferencesOverloading { 53 template<typename T> int &f(typename remove_reference<T>::type&); 54 template<typename T> float &f(typename remove_reference<T>::type&&); 55 56 void test_f(int (&func_ref)(int)) { 57 int &ir = f<int (&)(int)>(func_ref); 58 } 59} 60