1.8 KiB
[range.adaptor.helpers]
25 Ranges library [ranges]
25.7 Range adaptors [range.adaptors]
25.7.5 Range adaptor helpers [range.adaptor.helpers]
namespace std::ranges {template<class F, class Tuple>constexpr auto tuple-transform(F&& f, Tuple&& t) { // exposition onlyreturn apply([&]<class... Ts>(Ts&&... elements) {return tuple<invoke_result_t<F&, Ts>...>(invoke(f, std::forward(elements))...); }, std::forward(t)); }template<class F, class Tuple>constexpr void tuple-for-each(F&& f, Tuple&& t) { // exposition only apply([&]<class... Ts>(Ts&&... elements) {(static_cast(invoke(f, std::forward(elements))), ...); }, std::forward(t)); }templateconstexpr T& as-lvalue(T&& t) { // exposition onlyreturn static_cast<T&>(t); }template<bool Const, class... Views>concept all-random-access = // exposition only(random_access_range<maybe-const<Const, Views>> && ...); template<bool Const, class... Views>concept all-bidirectional = // exposition only(bidirectional_range<maybe-const<Const, Views>> && ...); template<bool Const, class... Views>concept all-forward = // exposition only(forward_range<maybe-const<Const, Views>> && ...);}