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