You can create a compile-time trait that does what you want:
#include <type_traits>
template <std::size_t... Ts>
struct not_zero {};
template <std::size_t N>
struct not_zero<N> : std::integral_constant<bool, N> {};
template <std::size_t N, std::size_t... Ts>
struct not_zero<N, Ts...> : std::integral_constant<bool, N && not_zero<Ts...>::value> {};
template <typename T, std::size_t... Ts>
struct Array
{
static_assert(not_zero<Ts...>::value, "Dimension cannot be 0");
};
template struct Array<int, 3>; // OK
template struct Array<int, 3, 2, 1, 0>; // error: static assertion failed: Dimension cannot be 0
See a demo here.