14#ifndef RANGES_V3_ACTION_CONCEPTS_HPP
15#define RANGES_V3_ACTION_CONCEPTS_HPP
26#include <range/v3/detail/prologue.hpp>
34 struct movable_input_iterator
36 using iterator_category = std::input_iterator_tag;
38 using difference_type = std::ptrdiff_t;
40 using reference = T &&;
42 movable_input_iterator() =
default;
43 movable_input_iterator & operator++();
44 movable_input_iterator operator++(
int);
45 bool operator==(movable_input_iterator
const &)
const;
46 bool operator!=(movable_input_iterator
const &)
const;
60 CPP_concept semi_container =
61 forward_range<T> && default_constructible<uncvref_t<T>> &&
62 movable<uncvref_t<T>> &&
69 concept (container_)(T),
72 detail::movable_input_iterator<range_value_t<T>>,
73 detail::movable_input_iterator<range_value_t<T>>>
79 CPP_concept container =
86 CPP_requires(reservable_,
87 requires(C & c, C
const & cc)
89 c.reserve(ranges::size(c)),
92 concepts::requires_<same_as<
decltype(cc.capacity()),
93 decltype(ranges::size(c))>>,
94 concepts::requires_<same_as<
decltype(cc.max_size()),
95 decltype(ranges::size(c))>>
101 CPP_concept reservable =
106 template<
typename C,
typename I>
107 CPP_requires(reservable_with_assign_,
114 template<
typename C,
typename I>
115 CPP_concept reservable_with_assign =
123 CPP_concept random_access_reservable =
124 reservable<C> && random_access_range<C>;
130 template(
typename T)(
131 requires container<T>)
132 std::true_type is_lvalue_container_like(T &)
noexcept
137 template(
typename T)(
138 requires container<T>)
140 is_lvalue_container_like(reference_wrapper<T>)
noexcept
145 template(
typename T)(
146 requires container<T>)
147 std::true_type is_lvalue_container_like(std::reference_wrapper<T>)
noexcept
152 template(
typename T)(
153 requires container<T>)
154 std::true_type is_lvalue_container_like(ref_view<T>)
noexcept
160 using is_lvalue_container_like_t =
161 decltype(detail::is_lvalue_container_like(std::declval<T>()));
169 template(
typename T)(
170 concept (lvalue_container_like_)(T),
171 implicitly_convertible_to<detail::is_lvalue_container_like_t<T>, std::true_type>
176 CPP_concept lvalue_container_like =
183#include <range/v3/detail/epilogue.hpp>
The container_ concept std::vector is a container, std::array is not.
The lvalue_container_like_ concept.
The reservable_with_assign_ concept.
not_c< B::type::value > not_
Logically negate the integral constant-wrapped Boolean parameter.
Definition meta.hpp:1357
Point operator*(double s, const Point &a)
Multiply point by scalar.
Definition shapes.h:250