You can bring your own character, and then use static_assert
to test it:
#include <type_traits>
#include <vector>
#include <array>
template<typename T>
struct has_contiguous_memory : std::false_type {};
template<typename T, typename U>
struct has_contiguous_memory<std::vector<T, U>> : std::true_type {};
template<typename T>
struct has_contiguous_memory<std::vector<bool, T>> : std::false_type {};
template<typename T, typename U, typename V>
struct has_contiguous_memory<std::basic_string<T, U, V>> : std::true_type {};
template<typename T, std::size_t N>
struct has_contiguous_memory<std::array<T, N>> : std::true_type {};
template<typename T>
struct has_contiguous_memory<T[]> : std::true_type {};
template<typename T, std::size_t N>
struct has_contiguous_memory<T[N]> : std::true_type {};
source
share