1 // PR c++/85977, Incorrect handling of array reference size deduction
2 // { dg-do compile { target c++11 } }
3 
4 template <int N>
fn1(const char (&)[N])5 void fn1 (const char (&)[N]) { static_assert (N == 3, "fn1");}
6 
7 template <int N>
fn2(const short (&)[N])8 void fn2 (const short (&)[N]) { static_assert (N == 3, "fn2");}
9 
10 template <int N>
fn3(const int (&)[N])11 void fn3 (const int (&)[N]) { static_assert (N == 3, "fn2");}
12 
13 template <int N>
fn4(const long (&)[N])14 void fn4 (const long (&)[N]) { static_assert (N == 3, "fn4");}
15 
16 template <int N>
fn5(const unsigned char (&)[N])17 void fn5 (const unsigned char (&)[N]) { static_assert (N == 3, "fn5");}
18 
19 template <int N>
fn6(const unsigned short (&)[N])20 void fn6 (const unsigned short (&)[N]) { static_assert (N == 3, "fn6");}
21 
22 template <int N>
fn7(const unsigned int (&)[N])23 void fn7 (const unsigned int (&)[N]) { static_assert (N == 3, "fn7");}
24 
25 template <int N>
fn8(const unsigned int (&)[N])26 void fn8 (const unsigned int (&)[N]) { static_assert (N == 3, "fn8");}
27 
28 void
bar()29 bar ()
30 {
31   fn1 ({1, 2, 3});
32   fn2 ({1, 2, 3});
33   fn3 ({1, 2, 3});
34   fn4 ({1, 2, 3});
35   fn5 ({1, 2, 3});
36   fn6 ({1, 2, 3});
37   fn7 ({1, 2, 3});
38   fn8 ({1, 2, 3});
39 }
40