| 1524 | }; |
| 1525 | |
| 1526 | struct has_begin_end_impl { |
| 1527 | template <typename T, typename U = unqualified_t<T>, typename B = decltype(std::declval<U&>().begin()), |
| 1528 | typename E = decltype(std::declval<U&>().end())> |
| 1529 | static std::true_type test(int); |
| 1530 | |
| 1531 | template <typename...> |
| 1532 | static std::false_type test(...); |
| 1533 | }; |
| 1534 | |
| 1535 | struct has_key_type_impl { |
| 1536 | template <typename T, typename U = unqualified_t<T>, typename V = typename U::key_type> |