40 decltype(std::declval<T>().data()),
41 decltype(std::declval<T>().size()),
42 decltype(std::declval<T>().begin()),
43 decltype(std::declval<T>().end())>> : std::true_type {
46 static constexpr bool value = std::is_pointer_v<decltype(std::declval<T>().data())>;
47 using type = std::bool_constant<value>;
54 decltype(std::declval<T>().begin()),
55 typename std::remove_reference_t<T>::iterator>,
57 decltype(std::declval<T>().end()),
58 typename std::remove_reference_t<T>::iterator>,
59 std::negation<std::is_same<
60 typename std::remove_reference_t<T>::iterator,
61 typename std::remove_reference_t<T>::const_iterator>>> {};