diff options
Diffstat (limited to 'test/CXX/temp/temp.decls/temp.class.spec/temp.class.order/p2.cpp')
-rw-r--r-- | test/CXX/temp/temp.decls/temp.class.spec/temp.class.order/p2.cpp | 38 |
1 files changed, 35 insertions, 3 deletions
diff --git a/test/CXX/temp/temp.decls/temp.class.spec/temp.class.order/p2.cpp b/test/CXX/temp/temp.decls/temp.class.spec/temp.class.order/p2.cpp index cfa14f9..97457ea 100644 --- a/test/CXX/temp/temp.decls/temp.class.spec/temp.class.order/p2.cpp +++ b/test/CXX/temp/temp.decls/temp.class.spec/temp.class.order/p2.cpp @@ -1,16 +1,48 @@ // RUN: %clang_cc1 -fsyntax-only -verify %s -template<int I, int J, class T> class X { +template<int I, int J, class T> struct X { static const int value = 0; }; -template<int I, int J> class X<I, J, int> { +template<int I, int J> struct X<I, J, int> { static const int value = 1; }; -template<int I> class X<I, I, int> { +template<int I> struct X<I, I, int> { static const int value = 2; }; int array0[X<0, 0, float>::value == 0? 1 : -1]; int array1[X<0, 1, int>::value == 1? 1 : -1]; int array2[X<0, 0, int>::value == 2? 1 : -1]; + +namespace DependentSubstPartialOrdering { + template<typename T, typename U = void, typename V = void> + struct X { + static const unsigned value = 1; + }; + + template<typename T, typename U> + struct X<T, U, typename T::is_b> { + static const unsigned value = 2; + }; + + template<typename T> + struct X<T, typename T::is_a, typename T::is_b> { + static const unsigned value = 3; + }; + + struct X1 { }; + + struct X2 { + typedef void is_b; + }; + + struct X3 { + typedef void is_a; + typedef void is_b; + }; + + int check_X1[X<X1, void, void>::value == 1? 1 : -1]; + int check_X2[X<X2, void, void>::value == 2? 1 : -1]; + int check_X3[X<X3, void, void>::value == 3? 1 : -1]; +} |