| // RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s |
| // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s |
| // expected-no-diagnostics |
| |
| namespace OrderWithStaticMember { |
| struct A { |
| template<class T> int g(T**, int=0) { return 0; } |
| template<class T> static int g(T*) { return 1; } |
| }; |
| void f() { |
| A a; |
| int **p; |
| a.g(p); |
| } |
| } |
| |
| #if __cplusplus >= 201103L |
| namespace OperatorWithRefQualifier { |
| struct A { }; |
| template<class T> struct B { |
| template<class R> int &operator*(R&) &&; |
| }; |
| |
| template<class T, class R> float &operator*(T&&, R&); |
| void test() { |
| A a; |
| B<A> b; |
| float &ir = b * a; |
| int &ir2 = B<A>() * a; |
| } |
| } |
| |
| namespace PR17075 { |
| template <typename T> struct V {}; |
| struct S { template<typename T> S &operator>>(T &t) = delete; }; |
| template<typename T> S &operator>>(S &s, V<T> &v); |
| void f(S s, V<int> v) { s >> v; } |
| } |
| #endif |