• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
test_f(int (& func_ref)(int))56   void test_f(int (&func_ref)(int)) {
57     int &ir = f<int (&)(int)>(func_ref);
58   }
59 }
60