Home | History | Annotate | Download | only in over.ics.rank
      1 // RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify %s
      2 namespace 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 
     37 template<typename T>
     38 struct remove_reference {
     39   typedef T type;
     40 };
     41 
     42 template<typename T>
     43 struct remove_reference<T&> {
     44   typedef T type;
     45 };
     46 
     47 template<typename T>
     48 struct remove_reference<T&&> {
     49   typedef T type;
     50 };
     51 
     52 namespace 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