diff options
Diffstat (limited to 'test/CXX/temp/temp.fct.spec/temp.deduct/sfinae-1.cpp')
-rw-r--r-- | test/CXX/temp/temp.fct.spec/temp.deduct/sfinae-1.cpp | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/test/CXX/temp/temp.fct.spec/temp.deduct/sfinae-1.cpp b/test/CXX/temp/temp.fct.spec/temp.deduct/sfinae-1.cpp index f6121b3..6481485 100644 --- a/test/CXX/temp/temp.fct.spec/temp.deduct/sfinae-1.cpp +++ b/test/CXX/temp/temp.fct.spec/temp.deduct/sfinae-1.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 %s +// RUN: %clang_cc1 -verify %s typedef char one_byte; struct two_bytes { char data[2]; }; @@ -15,3 +15,28 @@ struct X { }; int array0[is_class<X>::value? 1 : -1]; int array1[is_class<int>::value? -1 : 1]; int array2[is_class<char[3]>::value? -1 : 1]; + +namespace instantiation_order1 { + template<typename T> + struct it_is_a_trap { + typedef typename T::trap type; + }; + + template<bool, typename T = void> + struct enable_if { + typedef T type; + }; + + template<typename T> + struct enable_if<false, T> { }; + + template<typename T> + typename enable_if<sizeof(T) == 17>::type + f(const T&, typename it_is_a_trap<T>::type* = 0); + + void f(...); + + void test_f() { + f('a'); + } +} |