44 lines
674 B
C++
44 lines
674 B
C++
|
// 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;
|
||
|
}
|