85 concept Mesh = std::regular<M> and h5::Storable<M> and
requires(M
const &m) {
87 typename M::mesh_point_t;
92#if not(defined(_LIBCPP_VERSION) and (_LIBCPP_VERSION < 210000))
93 requires std::ranges::forward_range<M>;
94 requires std::ranges::sized_range<M>;
96 { *std::begin(m) } -> std::same_as<typename M::mesh_point_t>;
102 typename M::data_index_t;
103 } and
requires(M
const &m,
typename M::index_t index,
typename M::data_index_t data_index,
typename M::mesh_point_t mp) {
105 { m.is_index_valid(index) } -> std::same_as<bool>;
108 { m.to_data_index(index) } -> std::same_as<typename M::data_index_t>;
109 { m.to_index(data_index) } -> std::same_as<typename M::index_t>;
112 { m.operator[](data_index) } -> std::same_as<typename M::mesh_point_t>;
113 { m.operator()(index) } -> std::same_as<typename M::mesh_point_t>;
116 { m.mesh_hash() } -> std::same_as<uint64_t>;