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