Please excuse my ignorance. If we have this in the core language:

template<typename T, size_t N>
auto consume_array ( const T (&arr)[N])
{
   return N ;
}

Why would we need:

auto consume_array_as_modern_c_does ( const int N, const char arr[ static N] )
{
   return N ;
}

I might be missing here something obvious?

Kind regards ...