Another simple one:
template <template <typename...> class Container>
struct is_ordered : std::false_type {};
template <> struct is_ordered<std::map> : std::true_type {};
template <> struct is_ordered<std::set> : std::true_type {};
template <> struct is_ordered<std::multimap> : std::true_type {};
template <> struct is_ordered<std::multiset> : std::true_type {};
and then just static_assert(is_ordered<Container>::value, "error")
to use it. It's pretty easy to extend to custom containers too: just add a line like the above.
If you don't want to use template-templates at the call site, you can always wrap it ala:
template <typename T> struct is_ordered_2 : std::false_type {};
template <template <typename...> class Container, typename... Ts>
struct is_ordered_2<Container<Ts...>> : is_ordered<Container> {};
and then you can use it either way.