| // RUN: clang-cc -fsyntax-only -verify %s |
| |
| // Tests that overload resolution is treated as an unevaluated context. |
| // PR5541 |
| struct Foo |
| { |
| Foo *next; |
| }; |
| |
| template <typename> |
| struct Bar |
| { |
| }; |
| |
| |
| template <typename T> |
| class Wibble |
| { |
| typedef Bar<T> B; |
| |
| static inline B *concrete(Foo *node) { |
| int a[sizeof(T) ? -1 : -1]; |
| return reinterpret_cast<B *>(node); |
| } |
| |
| public: |
| class It |
| { |
| Foo *i; |
| |
| public: |
| inline operator B *() const { return concrete(i); } |
| inline bool operator!=(const It &o) const { return i != |
| o.i; } |
| }; |
| }; |
| |
| void f() { |
| Wibble<void*>::It a, b; |
| |
| a != b; |
| } |