In the C++ code below, the templated Check function gives an output that is not what I would like: it's 1 instead of 3. I suspect that K is mapped to int*, not to int[3] (is that a type?). I would like it to give me the same output than the second (non templated) function, to which I explicitly give the size of the array...

Short of using macros, is there a way to write a Check function that accepts a single argument but still knows the size of the array?

Better to use a std::vector instead of an array.
–
anonDec 9 '09 at 13:17

2

In your original code, the type K degenerates to a pointer when you pass an array to Check. This is normal C/C++ behavior, with or without templates involved. Fortunately, C++ provides a mechanism to preserve the array size, by using an integral constant as a template parameter. See Alexey Malistov's answer for more details.
–
Charles SalviaDec 9 '09 at 13:21