1 // RUN: %clang_cc1 -fsyntax-only -verify %s
2 // expected-no-diagnostics
3 template<int I
, int J
, class T
> struct X
{
4 static const int value
= 0;
7 template<int I
, int J
> struct X
<I
, J
, int> {
8 static const int value
= 1;
11 template<int I
> struct X
<I
, I
, int> {
12 static const int value
= 2;
15 int array0
[X
<0, 0, float>::value
== 0? 1 : -1];
16 int array1
[X
<0, 1, int>::value
== 1? 1 : -1];
17 int array2
[X
<0, 0, int>::value
== 2? 1 : -1];
19 namespace DependentSubstPartialOrdering
{
20 template<typename T
, typename U
= void, typename V
= void>
22 static const unsigned value
= 1;
25 template<typename T
, typename U
>
26 struct X
<T
, U
, typename
T::is_b
> {
27 static const unsigned value
= 2;
31 struct X
<T
, typename
T::is_a
, typename
T::is_b
> {
32 static const unsigned value
= 3;
46 int check_X1
[X
<X1
, void, void>::value
== 1? 1 : -1];
47 int check_X2
[X
<X2
, void, void>::value
== 2? 1 : -1];
48 int check_X3
[X
<X3
, void, void>::value
== 3? 1 : -1];