xref: /llvm-project/clang/test/SemaTemplate/dependent-sized_array.cpp (revision de63d36fb2101573f03e5104a0511a378e2473ac)
18fbe78f6SDaniel Dunbar // RUN: %clang_cc1 -fsyntax-only -pedantic -verify %s
2ad2956c2SDouglas Gregor 
3ad2956c2SDouglas Gregor template<int N>
f()4ad2956c2SDouglas Gregor void f() {
5ad2956c2SDouglas Gregor   int a[] = { 1, 2, 3, N };
6ad2956c2SDouglas Gregor   unsigned numAs = sizeof(a) / sizeof(int);
7ad2956c2SDouglas Gregor }
8ad2956c2SDouglas Gregor 
9ad2956c2SDouglas Gregor template void f<17>();
10ad2956c2SDouglas Gregor 
11deebf6efSDouglas Gregor 
12deebf6efSDouglas Gregor template<int N>
f1()13deebf6efSDouglas Gregor void f1() {
14deebf6efSDouglas Gregor   int a0[] = {}; // expected-warning{{zero}}
15deebf6efSDouglas Gregor   int a1[] = { 1, 2, 3, N };
16deebf6efSDouglas Gregor   int a3[sizeof(a1)/sizeof(int) != 4? 1 : -1]; // expected-error{{negative}}
17deebf6efSDouglas Gregor }
18*de63d36fSRichard Smith 
19*de63d36fSRichard Smith namespace PR13788 {
20*de63d36fSRichard Smith   template <unsigned __N>
21*de63d36fSRichard Smith   struct S {
22*de63d36fSRichard Smith     int V;
23*de63d36fSRichard Smith   };
24*de63d36fSRichard Smith   template <int N>
foo()25*de63d36fSRichard Smith   void foo() {
26*de63d36fSRichard Smith     S<0> arr[N] = {{ 4 }};
27*de63d36fSRichard Smith   }
28*de63d36fSRichard Smith }
29