forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			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;
 | 
						|
}
 |