1 // { dg-do compile { target c++11 } }
2 
3 // From N2235
4 
5 // function template 1
6 template<typename T>
bytesize(T t)7   constexpr int bytesize(T t)
8   { return sizeof (t); }        // OK
9 
10 char buf[bytesize(0)];          // OK -- not C99 VLA
11 
12 
13 // function template 2
14 template<typename _Tp>
15   constexpr _Tp
square(_Tp x)16   square(_Tp x) { return x; }
17 
18 // Explicit specialization
19 template<>
20   constexpr unsigned long
square(unsigned long x)21   square(unsigned long x) { return x * x; }
22 
23 // Explicit instantiation
24 template int square(int);
25 
26 class A { };
27 template A square(A);
28 
29 template long square(long);
30