p2.cpp revision 8e8fb3be5bd78f0564444eca02b404566a5f3b5d
15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project// RUN: %clang_cc1 -fsyntax-only -verify %s
25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project// expected-no-diagnostics
35738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttemplate<int I, int J, class T> struct X {
45738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  static const int value = 0;
55738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
65738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
75738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttemplate<int I, int J> struct X<I, J, int> {
85738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  static const int value = 1;
95738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttemplate<int I> struct X<I, I, int> {
125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  static const int value = 2;
135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectint array0[X<0, 0, float>::value == 0? 1 : -1];
165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectint array1[X<0, 1, int>::value == 1? 1 : -1];
175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectint array2[X<0, 0, int>::value == 2? 1 : -1];
185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectnamespace DependentSubstPartialOrdering {
205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  template<typename T, typename U = void, typename V = void>
215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  struct X {
225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    static const unsigned value = 1;
235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  };
245cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen
255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  template<typename T, typename U>
265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  struct X<T, U, typename T::is_b> {
275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    static const unsigned value = 2;
285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  };
295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  template<typename T>
315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  struct X<T, typename T::is_a, typename T::is_b> {
325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    static const unsigned value = 3;
335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  };
345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  struct X1 { };
365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  struct X2 {
385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    typedef void is_b;
395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  };
4066432dcffe211e317d35978283a04a96d5620bdfMatthew Xie
4166432dcffe211e317d35978283a04a96d5620bdfMatthew Xie  struct X3 {
4266432dcffe211e317d35978283a04a96d5620bdfMatthew Xie    typedef void is_a;
4366432dcffe211e317d35978283a04a96d5620bdfMatthew Xie    typedef void is_b;
4466432dcffe211e317d35978283a04a96d5620bdfMatthew Xie  };
455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  int check_X1[X<X1, void, void>::value == 1? 1 : -1];
475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  int check_X2[X<X2, void, void>::value == 2? 1 : -1];
485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project  int check_X3[X<X3, void, void>::value == 3? 1 : -1];
495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project