// 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; | |
} |