5#ifndef INCLUDE_GUARD_ARENE_BASE_STDLIB_INCLUDE_STDLIB_DETAIL_BASIC_INSERT_ITERATOR_HPP_
6#define INCLUDE_GUARD_ARENE_BASE_STDLIB_INCLUDE_STDLIB_DETAIL_BASIC_INSERT_ITERATOR_HPP_
13#include "stdlib/include/stdlib_detail/addressof.hpp"
14#include "stdlib/include/stdlib_detail/basic_iterator.hpp"
15#include "stdlib/include/stdlib_detail/declval.hpp"
16#include "stdlib/include/stdlib_detail/forward.hpp"
17#include "stdlib/include/stdlib_detail/is_move_constructible.hpp"
18#include "stdlib/include/stdlib_detail/is_same.hpp"
19#include "stdlib/include/stdlib_detail/iterator_tags.hpp"
22#include "stdlib/include/stdlib_detail/move.hpp"
24#include "stdlib/include/stdlib_detail/remove_cv.hpp"
25#include "stdlib/include/stdlib_detail/remove_reference.hpp"
26#include "stdlib/include/stdlib_detail/void_t.hpp"
40template <
class T,
class =
void>
65template <
class T,
class =
void>
100template <
class Container,
class AdaptorMixin>
103 ,
protected AdaptorMixin {
114 using container_type = Container;
120 using AdaptorMixin::AdaptorMixin;
133 constexpr auto operator=(
typename Container::value_type
const& value
147 constexpr auto operator=(
typename Container::value_type&& value
149 this->insert(std::move(value));
186template <
class Container>
190 "'Container' does not satisfy syntactic requirements"
216 std::is_same_v<
typename Container::value_type, std::remove_cv_t<std::remove_reference_t<T>>>,
217 "this internal function is only intended for use with cv-ref qualified container value types."
219 static_cast<
void>(container->push_back(std::forward<T>(value)));
243template <
class Container>
264template <
class Container>
266 return back_insert_iterator<Container>{container};
276template <
class Container>
280 "'Container' does not satisfy syntactic requirements"
285 "'Container' does not satisfy syntactic requirements"
290 using iterator_type =
typename Container::iterator;
317 constexpr auto insert(T&& value)
noexcept(
noexcept(
322 std::is_same_v<
typename Container::value_type, std::remove_cv_t<std::remove_reference_t<T>>>,
323 "this internal function is only intended for use with cv-ref qualified container value types."
325 iter = container->insert(iter, std::forward<T>(value));
327 static_cast<
void>(++
iter);
336 constexpr adaptor_mixin(Container& cont,
typename Container::iterator pos)
noexcept
355template <
class Container>
356using insert_iterator =
374template <
class Container>
376 Container& container,
377 typename Container::iterator iter
379 return {container, std::move(iter)};
mixin used to define back_insert_iterator
Definition basic_insert_iterator.hpp:187
Container * container
associated container to insert into
Definition basic_insert_iterator.hpp:203
constexpr auto insert(T &&value) noexcept(noexcept(container->push_back(std::forward< T >(value)))) -> void
insert an element into the associated container
Definition basic_insert_iterator.hpp:214
constexpr adaptor_mixin(Container &cont) noexcept
constructs an adaptor_mixin
Definition basic_insert_iterator.hpp:226
iterator adaptor for insertion into a container
Definition basic_insert_iterator.hpp:103
constexpr auto operator=(typename Container::value_type &&value) noexcept(is_nothrow_insertable_v< typename Container::value_type && >) -> basic_insert_iterator &
inserts a value into the associated container
Definition basic_insert_iterator.hpp:147
constexpr auto operator++() noexcept -> basic_insert_iterator &
no-op
Definition basic_insert_iterator.hpp:163
constexpr auto operator++(int) noexcept -> basic_insert_iterator &
no-op
Definition basic_insert_iterator.hpp:170
constexpr auto operator=(typename Container::value_type const &value) noexcept(is_nothrow_insertable_v< typename Container::value_type const & >) -> basic_insert_iterator &
inserts a value into the associated container
Definition basic_insert_iterator.hpp:133
constexpr auto operator*() noexcept -> basic_insert_iterator &
no-op
Definition basic_insert_iterator.hpp:158
mixin used to define insert_iterator
Definition basic_insert_iterator.hpp:277
constexpr adaptor_mixin(Container &cont, typename Container::iterator pos) noexcept
constructs an adaptor_mixin
Definition basic_insert_iterator.hpp:336
Container * container
associated container to insert into
Definition basic_insert_iterator.hpp:302
constexpr auto insert(T &&value) noexcept(noexcept(std::declval< iterator_type & >()=container->insert(std::declval< iterator_type & >(), std::forward< T >(value)),++std::declval< iterator_type & >())) -> void
insert an element into the associated container
Definition basic_insert_iterator.hpp:317
iterator_type iter
location to insert into
Definition basic_insert_iterator.hpp:306
Definition basic_insert_iterator.hpp:179
Definition basic_insert_iterator.hpp:33
constexpr bool has_value_type_member_v
helper variable template to check if a type defines member value_type
constexpr bool has_iterator_member_v
helper variable template to check if a type defines member iterator
constexpr bool has_value_type_member_impl
helper variable template to check if a type defines member value_type
constexpr bool has_iterator_member_impl
helper variable template to check if a type defines member iterator
Definition basic_insert_iterator.hpp:271
constexpr auto back_inserter(Container &container) noexcept -> back_insert_iterator< Container >
creates a std::back_insert_iterator of type inferred from the argument
Definition basic_insert_iterator.hpp:265
constexpr auto inserter(Container &container, typename Container::iterator iter) noexcept(std::is_nothrow_move_constructible_v< typename Container::iterator >) -> insert_iterator< Container >
creates an std::insert_iterator of type inferred from the argument
Definition basic_insert_iterator.hpp:375
constexpr auto operator()(::arene::base::result< void, E > const &value) const noexcept(noexcept(hash< E >{}(std::declval< E const & >()))) -> std::size_t
Calculate the hash of a result.
Definition result.hpp:1827