1*3e34cfe8SAkira Hatanaka // RUN: %clang_cc1 -fsyntax-only -verify %s
2*3e34cfe8SAkira Hatanaka // expected-no-diagnostics
3*3e34cfe8SAkira Hatanaka 
4*3e34cfe8SAkira Hatanaka extern int array[1];
5*3e34cfe8SAkira Hatanaka 
6*3e34cfe8SAkira Hatanaka template <typename>
7*3e34cfe8SAkira Hatanaka class C {
8*3e34cfe8SAkira Hatanaka   enum { D };
9*3e34cfe8SAkira Hatanaka public:
10*3e34cfe8SAkira Hatanaka   template <typename A> void foo1() {
11*3e34cfe8SAkira Hatanaka     extern int array[((int)C<A>::k > (int)D) ? 1 : -1];
12*3e34cfe8SAkira Hatanaka   }
13*3e34cfe8SAkira Hatanaka };
14*3e34cfe8SAkira Hatanaka 
15*3e34cfe8SAkira Hatanaka template<>
16*3e34cfe8SAkira Hatanaka class C<int> {
17*3e34cfe8SAkira Hatanaka public:
18*3e34cfe8SAkira Hatanaka   const static int k = 2;
19*3e34cfe8SAkira Hatanaka };
20*3e34cfe8SAkira Hatanaka 
21*3e34cfe8SAkira Hatanaka void foo2() {
22*3e34cfe8SAkira Hatanaka   C<char> c;
23*3e34cfe8SAkira Hatanaka   c.foo1<int>();
24*3e34cfe8SAkira Hatanaka }
25*3e34cfe8SAkira Hatanaka 
26*3e34cfe8SAkira Hatanaka template<int n>
27*3e34cfe8SAkira Hatanaka void foo3() {
28*3e34cfe8SAkira Hatanaka   extern int array[n ? 1 : -1];
29*3e34cfe8SAkira Hatanaka }
30*3e34cfe8SAkira Hatanaka 
31*3e34cfe8SAkira Hatanaka void foo4() {
32*3e34cfe8SAkira Hatanaka   foo3<5>();
33*3e34cfe8SAkira Hatanaka }
34