1 // RUN: %clang_cc1 -fsyntax-only -verify -Wno-unused %s 2 // expected-no-diagnostics 3 4 // Tests that overload resolution is treated as an unevaluated context. 5 // PR5541 6 struct Foo 7 { 8 Foo *next; 9 }; 10 11 template <typename> 12 struct Bar 13 { 14 }; 15 16 17 template <typename T> 18 class Wibble 19 { 20 typedef Bar<T> B; 21 concrete(Foo * node)22 static inline B *concrete(Foo *node) { 23 int a[sizeof(T) ? -1 : -1]; 24 return reinterpret_cast<B *>(node); 25 } 26 27 public: 28 class It 29 { 30 Foo *i; 31 32 public: operator B*() const33 inline operator B *() const { return concrete(i); } operator !=(const It & o) const34 inline bool operator!=(const It &o) const { return i != 35 o.i; } 36 }; 37 }; 38 f()39void f() { 40 Wibble<void*>::It a, b; 41 42 a != b; 43 } 44