I would guess that if you pass a non-reference, the array decays to a pointer and the size argument is just ignored (for one dimension).
If you pass a reference to an array, its size needs to be known and can be deduced by the compiler.
Code:
#include <iostream>
void foo(const char c[10])
{
std::cout << c << '\n';
}
void bar(const char (&c)[10])
{
std::cout << c << '\n';
}
int main()
{
char ten[] = "ABCDEFGHI";
char twelve[] = "Hello world";
foo(ten);
foo(twelve); //number of characters doesn't matter
bar(ten);
//bar(twelve); //ERROR, expected char[10], got char[12]
}
Edit: if your compiler has the __PRETTY_FUNCTION__ macro, you might see that the first signature is seen as void foo(const char* c)