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