21template<
typename T,
typename =
void>
25struct has_begin<T,
void_t<decltype(std::declval<T>().begin())>> : std::true_type {};
27template<
typename T,
typename =
void>
31struct has_end<T,
void_t<decltype(std::declval<T>().begin())>> : std::true_type {};
34struct is_iterable : std::conjunction<has_begin<T>, has_end<T>> {};