14#ifndef RANGES_V3_VIEW_MAP_HPP
15#define RANGES_V3_VIEW_MAP_HPP
25#include <range/v3/utility/static_const.hpp>
29#include <range/v3/detail/prologue.hpp>
40 constexpr T & get_first_second_helper(T & t, std::true_type)
noexcept
46 requires move_constructible<T>)
47 constexpr T get_first_second_helper(T & t, std::false_type)
48 noexcept(std::is_nothrow_move_constructible<T>::value)
53 template<
typename P,
typename E>
55 std::is_lvalue_reference<E>::value>;
60 template<
typename Pair>
61 constexpr auto CPP_auto_fun(
operator())(Pair &&p)(
const)
63 return get_first_second_helper(
65 get_first_second_tag<Pair,
decltype(p.first)>{})
73 template<
typename Pair>
74 constexpr auto CPP_auto_fun(
operator())(Pair &&p)(
const)
76 return get_first_second_helper(
78 get_first_second_tag<Pair,
decltype(p.second)>{})
87 CPP_concept kv_pair_like_ =
88 invocable<get_first const &, T> &&
89 invocable<get_second const &, T>;
100 template(
typename Rng)(
102 detail::kv_pair_like_<range_reference_t<Rng>>)
105 return {all(
static_cast<Rng &&
>(rng)), detail::get_first{}};
111 template(
typename Rng)(
113 detail::kv_pair_like_<range_reference_t<Rng>>)
116 return {all(
static_cast<Rng &&
>(rng)), detail::get_second{}};
129 template<
typename Rng>
130 RANGES_INLINE_VAR
constexpr bool enable_borrowed_range<keys_range_view<Rng>> =
131 enable_borrowed_range<Rng>;
132 template<
typename Rng>
133 RANGES_INLINE_VAR
constexpr bool enable_borrowed_range<values_view<Rng>> =
134 enable_borrowed_range<Rng>;
140 using ranges::views::keys;
141 using ranges::views::values;
148#include <range/v3/detail/epilogue.hpp>
The viewable_range concept.
std::integral_constant< bool, B > bool_
An integral constant wrapper for bool.
Definition meta.hpp:168