// RUN: %clang_cc1 -fsyntax-only -verify %s // expected-no-diagnostics extern int array[1]; template <typename> class C { enum { D }; public: template <typename A> void foo1() { extern int array[((int)C<A>::k > (int)D) ? 1 : -1]; } }; template<> class C<int> { public: const static int k = 2; }; void foo2() { C<char> c; c.foo1<int>(); } template<int n> void foo3() { extern int array[n ? 1 : -1]; } void foo4() { foo3<5>(); } namespace NS { int f() { extern int arr[3]; { extern int arr[]; } return 0; } template<typename T> void g() { extern int arr[3]; extern T arr; } template void g<int[]>(); }