inline SPROUT_CONSTEXPR bool operator<(sprout::array<T, N> const& lhs, sprout::array<T, N> const& rhs) { return sprout::lexicographical_compare(lhs.begin(), lhs.end(), rhs.begin(), rhs.end()); }
inline SPROUT_CONSTEXPR std::size_t hash_value(sprout::array<T, N> const& v) { return sprout::hash_range(v.begin(), v.end()); }
inline SPROUT_CONSTEXPR bool operator==(sprout::array<T, N> const& lhs, sprout::array<T, N> const& rhs) { return sprout::equal(lhs.begin(), lhs.end(), rhs.begin()); }