|
|
@@ -25,9 +25,12 @@ template <typename, typename = void> struct is_associative : std::false_type {};
|
|
|
template <typename T>
|
|
|
struct is_associative<T, std::void_t<typename T::mapped_type>> : std::true_type {};
|
|
|
|
|
|
+template <typename C>
|
|
|
+using insert_t = decltype(std::declval<C>().insert(std::declval<typename C::iterator>(),
|
|
|
+ std::declval<typename C::value_type>()));
|
|
|
template <typename, typename = void> struct is_container : std::false_type {};
|
|
|
template <typename T>
|
|
|
-struct is_container<T, std::void_t<typename T::value_type>> : std::true_type {};
|
|
|
+struct is_container<T, std::void_t<typename T::value_type, insert_t<T>>> : std::true_type {};
|
|
|
|
|
|
template <typename T> struct decay { using type = std::decay_t<T>; };
|
|
|
template <template <typename...> class C, typename... Ts>
|