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