Looking at the example implementation of std::is_array, they have the following code:
template<class T>
struct is_array<T[]> : std::true_type {};
template<class T, std::size_t N>
struct is_array<T[N]> : std::true_type {};
When will the T[] specialization be matched and not the T[N] specialization? Why the need for two? I assume this T[] isn't the same as it would be in a function argument where it means the same thing as a pointer right?