61 lines
1.1 KiB
C++
61 lines
1.1 KiB
C++
// 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);
|
|
}
|
|
}
|