tetl 0.1.0
Embedded Template Library
Loading...
Searching...
No Matches
projected.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: BSL-1.0
2
3#ifndef TETL_ITERATOR_PROJECTED_HPP
4#define TETL_ITERATOR_PROJECTED_HPP
5
12
13namespace etl {
14
15namespace detail {
16
17template <typename Iter, typename Proj>
18struct projected_impl {
19 struct type {
21 auto operator*() const -> etl::indirect_result_t<Proj&, Iter>; // not defined
22 };
23};
24
25template <typename Iter, typename Proj>
26 requires weakly_incrementable<Iter>
27struct projected_impl<Iter, Proj> {
28 struct type {
30 using difference_type = etl::iter_difference_t<Iter>; // conditionally present
31
32 auto operator*() const -> etl::indirect_result_t<Proj&, Iter>; // not defined
33 };
34};
35
36} // namespace detail
37
39template <etl::indirectly_readable Iter, etl::indirectly_regular_unary_invocable<Iter> Proj>
40using projected = etl::detail::projected_impl<Iter, Proj>::type;
41
42} // namespace etl
43
44#endif // TETL_ITERATOR_PROJECTED_HPP
etl::detail::projected_impl< Iter, Proj >::type projected
Definition projected.hpp:40
typename detail::iter_difference< T >::type iter_difference_t
Definition iter_difference_t.hpp:30
etl::invoke_result_t< F, etl::iter_reference_t< Iters >... > indirect_result_t
Definition indirect_result_t.hpp:16
Definition adjacent_find.hpp:8
remove_cv_t< remove_reference_t< T > > remove_cvref_t
Definition remove_cvref.hpp:23
constexpr auto operator*(complex< T > const &lhs, complex< T > const &rhs) -> complex< T >
Definition complex.hpp:304