Is there a necessary reason for this design?
This is historical baggage from C. Presumably 1 This was a convenience, since you cannot pass arrays -value in any case.
If you want to keep this type, you can use links or pointers:
void Func(int (&ar)[5]);
Or using the template functions to receive an array of arbitrary size:
template<std::size_t N> void Func(int (&ar)[N]);
source share