As described in commit 674a921 ("Add workaround for Win32 wrong type for
size_t"), std::array on Win32 returns type std::size_t, which is
`unsigned int` instead of the `unsigned long` seen on Linux. Calling
std::min requires both arguments to have the same type. On Linux, this
required casting the result of size() to `unsigned` to match the other
input. On Win32, that cast provokes a -Wuseless-cast warning. Add a
workaround by removing the cast and instead explicitly setting the type
of std::min's arguments to `unsigned`, then relying on the compiler to
perform an implicit conversion from `unsigned long` to `unsigned int`
on Linux. The value is always small enough to fit in an `unsigned int`,
so no precision loss will occur.