24#ifndef MYSQL_RANGES_META_H
25#define MYSQL_RANGES_META_H
40template <
class Range_t>
42 std::remove_cvref_t<decltype(std::declval<Range_t>().begin())>;
45template <
class Range_t>
47 std::remove_cvref_t<decltype(std::declval<const Range_t>().begin())>;
50template <
class Range_t>
52 std::remove_cvref_t<decltype(std::declval<Range_t>().end())>;
56template <
class Iterator_t,
class Range_t>
58 std::same_as<Iterator_t, Range_iterator_type<Range_t>>;
61template <
class Iterator_t>
63 std::remove_cvref_t<decltype(*std::declval<Iterator_t>())>;
66template <
class Range_t>
77 std::remove_cvref_t<decltype(std::declval<Map_t>().begin()->first)>;
88 std::remove_cvref_t<decltype(std::declval<Map_t>().begin()->second)>;
116 requires(
const Test ct, Test t)
118 { t.begin() } -> std::forward_iterator;
119 { t.end() } -> std::sentinel_for<
decltype(t.begin())>;
120 { ct.begin() } -> std::forward_iterator;
121 { ct.end() } -> std::sentinel_for<
decltype(ct.begin())>;
122 { ct.size() } -> std::same_as<std::size_t>;
123 { ct.ssize() } -> std::same_as<std::ptrdiff_t>;
124 { ct.empty() } -> std::same_as<bool>;
125 { (bool)ct } -> std::same_as<bool>;
130template <
class Test,
class Value_t>
133 std::same_as<mysql::ranges::Range_value_type<Test>, Value_t>;
True if Test models Is_collection, with Value_t as its value type.
Definition: meta.h:131
True if Test has the properties of a "collection", i.e., a range with member functions to query size ...
Definition: meta.h:115
True if Iterator is either the iterator or the const iterator for Range_t.
Definition: meta.h:57
Definition: buffer_interface.h:40
std::remove_cvref_t< decltype(std::declval< Range_t >().end())> Range_sentinel_type
Gives the iterator type, deduced from the end() member.
Definition: meta.h:52
std::remove_cvref_t< decltype(std::declval< Map_t >().begin() ->first)> Map_key_type
Gives the key type for any collection, deduced from begin()->first.
Definition: meta.h:77
std::remove_cvref_t< decltype(std::declval< Map_t >().begin() ->second)> Map_mapped_type
Gives the mapped type for any collection, deduced from begin()->first.
Definition: meta.h:88
std::remove_cvref_t< decltype(std::declval< const Range_t >().begin())> Range_const_iterator_type
Gives the const_iterator type, deduced from the begin() const member.
Definition: meta.h:47
std::remove_cvref_t< decltype(*std::declval< Iterator_t >())> Iterator_value_type
Gives the value type for any iterator type, deduced from operator *.
Definition: meta.h:63
std::remove_cvref_t< decltype(std::declval< Range_t >().begin())> Range_iterator_type
Gives the iterator type, deduced from the begin() member.
Definition: meta.h:42
Iterator_value_type< Range_iterator_type< Range_t > > Range_value_type
Gives the value type for any collection, deduced from *begin().
Definition: meta.h:67