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