Iros
 
Loading...
Searching...
No Matches
into_lockstep_sequence.h
Go to the documentation of this file.
1#pragma once
2
7#include "di/meta/util.h"
8
9namespace di::execution {
12 template<concepts::Sender Seq>
13 auto operator()(Seq&& sequence) const {
15 return util::forward<Seq>(sequence);
16 } else if constexpr (concepts::TagInvocable<Function, Seq>) {
18 static_assert(
20 "into_lockstep_sequence() customizations must return a sequence that is always lockstep.");
21 return tag_invoke(*this, util::forward<Seq>(sequence));
22 } else {
23 static_assert(concepts::AlwaysFalse<Seq>,
24 "FIXME: into_lockstep_sequence() does not have yet a default implementation.");
25 return util::forward<Seq>(sequence);
26 }
27 }
28 };
29}
30
48}
49
50namespace di::meta {
56template<concepts::Sender Seq>
58}
This concept is used with static_assert() to cause the static assert to fail only when the template h...
Definition core.h:98
Checks if Send is a sequence that is always lockstep.
Definition is_always_lockstep_sequence.h:63
Definition tag_invoke.h:33
Definition into_lockstep_sequence.h:10
Definition bulk.h:30
constexpr auto into_lockstep_sequence
Converts a sequence into a lockstep sequence.
Definition into_lockstep_sequence.h:47
Definition merge_interfaces.h:6
decltype(execution::into_lockstep_sequence(util::declval< Seq >())) IntoLockstepSequence
Deduce the type of converting a sequence into a lockstep sequence.
Definition into_lockstep_sequence.h:57
decltype(di::function::tag_invoke(util::declval< Tag >(), util::declval< Args >()...)) TagInvokeResult
Definition tag_invoke.h:40
auto declval() -> meta::AddRValueReference< T >
Definition declval.h:8
Expected< T, Error > Result
Definition result.h:8
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition tag_invoke.h:22
constexpr auto sequence
Definition sequence.h:34
Definition into_lockstep_sequence.h:11
auto operator()(Seq &&sequence) const
Definition into_lockstep_sequence.h:13