// RUN: %clang_cc1 -verify %s // expected-no-diagnostics typedef char one_byte; struct two_bytes { char data[2]; }; template one_byte __is_class_check(int T::*); template two_bytes __is_class_check(...); template struct is_class { static const bool value = sizeof(__is_class_check(0)) == 1; }; struct X { }; int array0[is_class::value? 1 : -1]; int array1[is_class::value? -1 : 1]; int array2[is_class::value? -1 : 1]; namespace instantiation_order1 { template struct it_is_a_trap { typedef typename T::trap type; }; template struct enable_if { typedef T type; }; template struct enable_if { }; template typename enable_if::type f(const T&, typename it_is_a_trap::type* = 0); void f(...); void test_f() { f('a'); } }