Expressions evaluating to arrays decay to pointers when passed to functions. Pointers don't contain size information, but arrays do. This is why the array parameter syntax is awful (because it's a lie) and you should just use a pointer instead.
You can also pass a reference to an array of size N where N is a non-type template parameter: