// RUN: %clang_cc1 -fsyntax-only -verify -Wno-unused %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; }