kokkos-execution
0.0.1
Toggle main menu visibility
Loading...
Searching...
No Matches
storage_for_completion_signatures.hpp
Go to the documentation of this file.
1
// NOLINTBEGIN
2
/*
3
* SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
4
* Copyright (c) 2025 Robert Leahy. All rights reserved.
5
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
*
7
* Licensed under the Apache License, Version 2.0 with LLVM Exceptions (the "License");
8
* you may not use this file except in compliance with the License.
9
* You may obtain a copy of the License at
10
*
11
* https://llvm.org/LICENSE.txt
12
*
13
* Unless required by applicable law or agreed to in writing, software
14
* distributed under the License is distributed on an "AS IS" BASIS,
15
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
* See the License for the specific language governing permissions and
17
* limitations under the License.
18
*/
19
20
#pragma once
21
22
#include "
matching_completion_signature.hpp
"
23
24
#include "stdexec/execution.hpp"
25
26
#include <exception>
27
#include <functional>
28
#include <tuple>
29
#include <type_traits>
30
#include <variant>
31
32
namespace
experimental::execution
{
33
34
namespace
detail::storage_for_completion_signatures
{
35
36
template
<
typename
T>
37
struct
decay
{
38
using
type
= std::decay_t<T>;
39
};
40
41
template
<
typename
T>
42
struct
decay
<T&> {
43
using
type
= T&;
44
};
45
46
template
<
typename
T>
47
struct
decay
<T&&> {
48
using
type
= T&&;
49
};
50
51
template
<
typename
>
52
struct
tuple_for_signature
;
53
54
template
<
typename
Tag,
typename
... Args>
55
struct
tuple_for_signature
<Tag(Args...)> {
56
using
type
= std::tuple<Tag, typename decay<Args>::type...>;
57
};
58
59
template
<
typename
Signatures,
typename
Tag,
typename
... Args>
60
using
tuple_for_arrival
=
61
typename
tuple_for_signature
<::exec::matching_completion_signature_t<Signatures, Tag, Args...>>::type;
62
63
template
<
typename
>
64
struct
variant_for_signatures
;
65
66
template
<
typename
... Signatures>
67
struct
variant_for_signatures
<::STDEXEC::completion_signatures<Signatures...>> {
68
using
type
= std::variant<std::monostate, typename tuple_for_signature<Signatures>::type...>;
69
};
70
71
template
<
typename
>
72
struct
signature
;
73
74
template
<
typename
Tag,
typename
... Args>
75
struct
signature
<Tag(Args...)> {
76
using
type
= Tag(
typename
decay<Args>::type
...);
77
};
78
79
template
<
typename
,
typename
>
80
struct
nothrow_visitable
;
81
82
template
<
typename
Visitor,
typename
Tag,
typename
... Args>
83
struct
nothrow_visitable
<Visitor, Tag(Args...)> {
84
static
constexpr
bool
value
= std::is_nothrow_invocable_v<Visitor, Tag, typename decay<Args>::type...>;
85
};
86
87
template
<
typename
>
88
struct
nothrow_storable
;
89
90
template
<
typename
Tag,
typename
... Args>
91
struct
nothrow_storable
<Tag(Args...)> {
92
static
constexpr
bool
value
= (std::is_nothrow_constructible_v<typename decay<Args>::type, Args> && ...);
93
};
94
95
template
<
typename
,
typename
...>
96
struct
arrival_storable
;
97
98
template
<
typename
Tag,
typename
... StoredArgs,
typename
... Args>
99
struct
arrival_storable
<std::tuple<Tag, StoredArgs...>, Args...> {
100
static
constexpr
bool
value
=
sizeof
...(StoredArgs) ==
sizeof
...(Args)
101
&& ((std::is_reference_v<StoredArgs> || !std::is_lvalue_reference_v<Args>) && ...);
102
};
103
104
}
// namespace detail::storage_for_completion_signatures
105
106
enum class
storage_for_completion_signatures_error_policy
{
107
__internalize
,
108
__propagate
109
};
110
111
template
<
112
typename
,
113
storage_for_completion_signatures_error_policy
=
storage_for_completion_signatures_error_policy::__internalize
114
>
115
class
storage_for_completion_signatures
;
116
117
template
<>
118
class
storage_for_completion_signatures
<
119
::STDEXEC::completion_signatures<>,
120
storage_for_completion_signatures_error_policy::__internalize
121
> {
122
public
:
123
using
completion_signatures
= ::STDEXEC::completion_signatures<>;
124
static
constexpr
bool
nothrow_arrive
=
true
;
125
126
template
<
typename
Visitor>
127
constexpr
bool
visit
(Visitor&&) &&
noexcept
{
128
return
false
;
129
}
130
131
template
<::STDEXEC::receiver Receiver>
132
constexpr
bool
complete
(Receiver&&) &&
noexcept
{
133
return
false
;
134
}
135
};
136
137
template
<>
138
class
storage_for_completion_signatures
<
139
::STDEXEC::completion_signatures<>,
140
storage_for_completion_signatures_error_policy::__propagate
141
>
142
:
public
storage_for_completion_signatures
<
143
::STDEXEC::completion_signatures<>,
144
storage_for_completion_signatures_error_policy::__internalize
145
> { };
146
147
template
<
typename
... Signatures>
148
class
storage_for_completion_signatures
<
149
::STDEXEC::completion_signatures<Signatures...>,
150
storage_for_completion_signatures_error_policy::__internalize
151
> {
152
using
base_signatures_
= ::STDEXEC::completion_signatures<
153
typename
detail::storage_for_completion_signatures::signature<Signatures>::type
...
154
>;
155
static
constexpr
auto
noexcept_
=
156
(
detail::storage_for_completion_signatures::nothrow_storable<Signatures>::value
&& ...);
157
using
maybe_throwing_signature_
= std::conditional_t<
158
noexcept_
,
159
::STDEXEC::completion_signatures<>,
160
::STDEXEC::completion_signatures<::STDEXEC::set_error_t(std::exception_ptr)>
161
>;
162
public
:
163
using
completion_signatures
=
164
::STDEXEC::transform_completion_signatures<base_signatures_, maybe_throwing_signature_>;
165
static
constexpr
bool
nothrow_arrive
=
true
;
166
167
private
:
168
template
<
typename
Tag,
typename
... Args>
169
using
tuple_type_
=
detail::storage_for_completion_signatures::tuple_for_arrival
<
170
::STDEXEC::completion_signatures<Signatures...>,
171
Tag,
172
Args...
173
>;
174
using
storage_type_
=
175
typename
detail::storage_for_completion_signatures::variant_for_signatures<completion_signatures>::type
;
176
storage_type_
storage_
;
177
template
<
typename
Visitor>
178
static
constexpr
bool
nothrow_visitable_
=
179
(
detail::storage_for_completion_signatures::nothrow_visitable<Visitor, Signatures>::value
&& ...);
180
public
:
181
template
<
typename
Tag,
typename
... Args>
182
requires
std::is_constructible_v<
storage_type_
, std::in_place_type_t<
tuple_type_
<Tag, Args...>>, Tag, Args...>
183
&&
detail::storage_for_completion_signatures::arrival_storable
<
tuple_type_
<Tag, Args...>, Args...>::value
184
constexpr
void
arrive
(Tag t, Args&&... args)
noexcept
{
185
STDEXEC_ASSERT(std::holds_alternative<std::monostate>(
storage_
));
186
constexpr
auto
nothrow = std::is_nothrow_constructible_v<
tuple_type_
<Tag, Args...>, Tag, Args...>;
187
const
auto
impl = [&]()
noexcept
(nothrow) {
188
storage_
.template emplace<
tuple_type_
<Tag, Args...>>((Tag&&) t, (Args&&) args...);
189
};
190
if
constexpr
(nothrow) {
191
impl();
192
}
else
{
193
try
{
194
impl();
195
}
catch
(...) {
196
storage_
.template emplace<std::tuple<::STDEXEC::set_error_t, std::exception_ptr>>(
197
::STDEXEC::set_error, std::current_exception());
198
}
199
}
200
}
201
202
template
<
typename
Visitor>
203
constexpr
bool
visit
(Visitor&& visitor) &&
noexcept
(
nothrow_visitable_<Visitor>
) {
204
return
std::visit(
205
[&](
auto
&& tuple_or_monostate)
noexcept
(
nothrow_visitable_<Visitor>
) {
206
if
constexpr
(std::is_same_v<std::monostate, std::remove_cvref_t<
decltype
(tuple_or_monostate)>>) {
207
return
false
;
208
}
else
{
209
std::apply((Visitor&&) visitor, (
decltype
(tuple_or_monostate)&&) tuple_or_monostate);
210
return
true
;
211
}
212
},
213
(
storage_type_
&&)
storage_
);
214
}
215
216
template
<::STDEXEC::receiver_of<completion_signatures> Receiver>
217
constexpr
bool
complete
(Receiver&& r) &&
noexcept
{
218
return
std::visit(
219
[&](
auto
&& tuple_or_monostate)
noexcept
{
220
if
constexpr
(std::is_same_v<std::monostate, std::remove_cvref_t<
decltype
(tuple_or_monostate)>>) {
221
return
false
;
222
}
else
{
223
using
tuple_type = std::remove_cvref_t<
decltype
(tuple_or_monostate)>;
224
constexpr
auto
nothrow = std::is_nothrow_constructible_v<tuple_type, tuple_type&&>;
225
const
auto
complete
= [&]()
noexcept
(nothrow) {
226
std::apply(
227
[&](
const
auto
tag,
auto
&&... args)
noexcept
{
228
tag((Receiver&&) r, (
decltype
(args)&&) args...);
229
},
230
// Odds are this is inside an operation state, which means that
231
// sending the completion signal may end our lifetime, which means
232
// we shouldn't send references into ourselves, therefore we move
233
// all the non-references onto the stack
234
tuple_type(std::move(tuple_or_monostate)));
235
};
236
if
constexpr
(nothrow) {
237
complete
();
238
}
else
{
239
try
{
240
complete
();
241
}
catch
(...) {
242
::STDEXEC::set_error((Receiver&&) r, std::current_exception());
243
}
244
}
245
return
true
;
246
}
247
},
248
(
storage_type_
&&)
storage_
);
249
}
250
};
251
252
template
<
typename
... Signatures>
253
class
storage_for_completion_signatures
<
254
::STDEXEC::completion_signatures<Signatures...>,
255
storage_for_completion_signatures_error_policy::__propagate
256
> {
257
using
base_signatures_
= ::STDEXEC::completion_signatures<
258
typename
detail::storage_for_completion_signatures::signature<Signatures>::type
...
259
>;
260
public
:
261
using
completion_signatures
=
base_signatures_
;
262
static
constexpr
bool
nothrow_arrive
=
263
(
detail::storage_for_completion_signatures::nothrow_storable<Signatures>::value
&& ...);
264
265
private
:
266
template
<
typename
Tag,
typename
... Args>
267
using
tuple_type_
=
detail::storage_for_completion_signatures::tuple_for_arrival
<
268
::STDEXEC::completion_signatures<Signatures...>,
269
Tag,
270
Args...
271
>;
272
using
storage_type_
=
273
typename
detail::storage_for_completion_signatures::variant_for_signatures<completion_signatures>::type
;
274
storage_type_
storage_
;
275
template
<
typename
Visitor>
276
static
constexpr
bool
nothrow_visitable_
=
277
(
detail::storage_for_completion_signatures::nothrow_visitable<Visitor, Signatures>::value
&& ...);
278
279
public
:
280
template
<
typename
Tag,
typename
... Args>
281
requires
std::is_constructible_v<
storage_type_
, std::in_place_type_t<
tuple_type_
<Tag, Args...>>, Tag, Args...>
282
&&
detail::storage_for_completion_signatures::arrival_storable
<
tuple_type_
<Tag, Args...>, Args...>::value
283
constexpr
void
arrive
(Tag t, Args&&... args)
284
noexcept
(std::is_nothrow_constructible_v<
tuple_type_
<Tag, Args...>, Tag, Args...>) {
285
STDEXEC_ASSERT(std::holds_alternative<std::monostate>(
storage_
));
286
try
{
287
storage_
.template emplace<
tuple_type_
<Tag, Args...>>((Tag&&) t, (Args&&) args...);
288
}
catch
(...) {
289
storage_
.template emplace<std::monostate>();
290
throw
;
291
}
292
}
293
294
template
<
typename
Visitor>
295
constexpr
bool
visit
(Visitor&& visitor) &&
noexcept
(
nothrow_visitable_<Visitor>
) {
296
return
std::visit(
297
[&](
auto
&& tuple_or_monostate)
noexcept
(
nothrow_visitable_<Visitor>
) {
298
if
constexpr
(std::is_same_v<std::monostate, std::remove_cvref_t<
decltype
(tuple_or_monostate)>>) {
299
return
false
;
300
}
else
{
301
std::apply((Visitor&&) visitor, (
decltype
(tuple_or_monostate)&&) tuple_or_monostate);
302
return
true
;
303
}
304
},
305
(
storage_type_
&&)
storage_
);
306
}
307
308
template
<::STDEXEC::receiver_of<completion_signatures> Receiver>
309
constexpr
bool
complete
(Receiver&& r) &&
noexcept
(
nothrow_arrive
) {
310
return
std::visit(
311
[&](
auto
&& tuple_or_monostate)
noexcept
(
nothrow_arrive
) {
312
if
constexpr
(std::is_same_v<std::monostate, std::remove_cvref_t<
decltype
(tuple_or_monostate)>>) {
313
return
false
;
314
}
else
{
315
using
tuple_type = std::remove_cvref_t<
decltype
(tuple_or_monostate)>;
316
std::apply(
317
[&](
const
auto
tag,
318
auto
&&... args)
noexcept
(
noexcept
(tag((Receiver&&) r, (
decltype
(args)&&) args...))) {
319
tag((Receiver&&) r, (decltype(args)&&) args...);
320
},
321
tuple_type(std::move(tuple_or_monostate)));
322
return
true
;
323
}
324
},
325
(
storage_type_
&&)
storage_
);
326
}
327
};
328
329
}
// namespace experimental::execution
330
331
// NOLINTEND
experimental::execution::storage_for_completion_signatures< ::stdexec::completion_signatures<>, storage_for_completion_signatures_error_policy::__internalize >::visit
constexpr bool visit(Visitor &&) &&noexcept
Definition
storage_for_completion_signatures.hpp:127
experimental::execution::storage_for_completion_signatures< ::stdexec::completion_signatures<>, storage_for_completion_signatures_error_policy::__internalize >::completion_signatures
::stdexec::completion_signatures<> completion_signatures
Definition
storage_for_completion_signatures.hpp:123
experimental::execution::storage_for_completion_signatures< ::stdexec::completion_signatures<>, storage_for_completion_signatures_error_policy::__internalize >::complete
constexpr bool complete(Receiver &&) &&noexcept
Definition
storage_for_completion_signatures.hpp:132
experimental::execution::storage_for_completion_signatures< ::stdexec::completion_signatures<>, storage_for_completion_signatures_error_policy::__internalize >::nothrow_arrive
static constexpr bool nothrow_arrive
Definition
storage_for_completion_signatures.hpp:124
experimental::execution::storage_for_completion_signatures< ::stdexec::completion_signatures< Signatures... >, storage_for_completion_signatures_error_policy::__internalize >::storage_
storage_type_ storage_
Definition
storage_for_completion_signatures.hpp:176
experimental::execution::storage_for_completion_signatures< ::stdexec::completion_signatures< Signatures... >, storage_for_completion_signatures_error_policy::__internalize >::nothrow_visitable_
static constexpr bool nothrow_visitable_
Definition
storage_for_completion_signatures.hpp:178
experimental::execution::storage_for_completion_signatures< ::stdexec::completion_signatures< Signatures... >, storage_for_completion_signatures_error_policy::__internalize >::visit
constexpr bool visit(Visitor &&visitor) &&noexcept(nothrow_visitable_< Visitor >)
Definition
storage_for_completion_signatures.hpp:203
experimental::execution::storage_for_completion_signatures< ::stdexec::completion_signatures< Signatures... >, storage_for_completion_signatures_error_policy::__internalize >::storage_type_
typename detail::storage_for_completion_signatures::variant_for_signatures< completion_signatures >::type storage_type_
Definition
storage_for_completion_signatures.hpp:174
experimental::execution::storage_for_completion_signatures< ::stdexec::completion_signatures< Signatures... >, storage_for_completion_signatures_error_policy::__internalize >::tuple_type_
detail::storage_for_completion_signatures::tuple_for_arrival< ::stdexec::completion_signatures< Signatures... >, Tag, Args... > tuple_type_
Definition
storage_for_completion_signatures.hpp:169
experimental::execution::storage_for_completion_signatures< ::stdexec::completion_signatures< Signatures... >, storage_for_completion_signatures_error_policy::__internalize >::noexcept_
static constexpr auto noexcept_
Definition
storage_for_completion_signatures.hpp:155
experimental::execution::storage_for_completion_signatures< ::stdexec::completion_signatures< Signatures... >, storage_for_completion_signatures_error_policy::__internalize >::complete
constexpr bool complete(Receiver &&r) &&noexcept
Definition
storage_for_completion_signatures.hpp:217
experimental::execution::storage_for_completion_signatures< ::stdexec::completion_signatures< Signatures... >, storage_for_completion_signatures_error_policy::__internalize >::nothrow_arrive
static constexpr bool nothrow_arrive
Definition
storage_for_completion_signatures.hpp:165
experimental::execution::storage_for_completion_signatures< ::stdexec::completion_signatures< Signatures... >, storage_for_completion_signatures_error_policy::__internalize >::completion_signatures
::stdexec::transform_completion_signatures< base_signatures_, maybe_throwing_signature_ > completion_signatures
Definition
storage_for_completion_signatures.hpp:163
experimental::execution::storage_for_completion_signatures< ::stdexec::completion_signatures< Signatures... >, storage_for_completion_signatures_error_policy::__internalize >::base_signatures_
::stdexec::completion_signatures< typename detail::storage_for_completion_signatures::signature< Signatures >::type... > base_signatures_
Definition
storage_for_completion_signatures.hpp:152
experimental::execution::storage_for_completion_signatures< ::stdexec::completion_signatures< Signatures... >, storage_for_completion_signatures_error_policy::__internalize >::arrive
constexpr void arrive(Tag t, Args &&... args) noexcept
Definition
storage_for_completion_signatures.hpp:184
experimental::execution::storage_for_completion_signatures< ::stdexec::completion_signatures< Signatures... >, storage_for_completion_signatures_error_policy::__internalize >::maybe_throwing_signature_
std::conditional_t< noexcept_, ::stdexec::completion_signatures<>, ::stdexec::completion_signatures<::stdexec::set_error_t(std::exception_ptr)> > maybe_throwing_signature_
Definition
storage_for_completion_signatures.hpp:157
experimental::execution::storage_for_completion_signatures< ::stdexec::completion_signatures< Signatures... >, storage_for_completion_signatures_error_policy::__propagate >::nothrow_visitable_
static constexpr bool nothrow_visitable_
Definition
storage_for_completion_signatures.hpp:276
experimental::execution::storage_for_completion_signatures< ::stdexec::completion_signatures< Signatures... >, storage_for_completion_signatures_error_policy::__propagate >::storage_
storage_type_ storage_
Definition
storage_for_completion_signatures.hpp:274
experimental::execution::storage_for_completion_signatures< ::stdexec::completion_signatures< Signatures... >, storage_for_completion_signatures_error_policy::__propagate >::complete
constexpr bool complete(Receiver &&r) &&noexcept(nothrow_arrive)
Definition
storage_for_completion_signatures.hpp:309
experimental::execution::storage_for_completion_signatures< ::stdexec::completion_signatures< Signatures... >, storage_for_completion_signatures_error_policy::__propagate >::completion_signatures
base_signatures_ completion_signatures
Definition
storage_for_completion_signatures.hpp:261
experimental::execution::storage_for_completion_signatures< ::stdexec::completion_signatures< Signatures... >, storage_for_completion_signatures_error_policy::__propagate >::base_signatures_
::stdexec::completion_signatures< typename detail::storage_for_completion_signatures::signature< Signatures >::type... > base_signatures_
Definition
storage_for_completion_signatures.hpp:257
experimental::execution::storage_for_completion_signatures< ::stdexec::completion_signatures< Signatures... >, storage_for_completion_signatures_error_policy::__propagate >::storage_type_
typename detail::storage_for_completion_signatures::variant_for_signatures< completion_signatures >::type storage_type_
Definition
storage_for_completion_signatures.hpp:272
experimental::execution::storage_for_completion_signatures< ::stdexec::completion_signatures< Signatures... >, storage_for_completion_signatures_error_policy::__propagate >::tuple_type_
detail::storage_for_completion_signatures::tuple_for_arrival< ::stdexec::completion_signatures< Signatures... >, Tag, Args... > tuple_type_
Definition
storage_for_completion_signatures.hpp:267
experimental::execution::storage_for_completion_signatures< ::stdexec::completion_signatures< Signatures... >, storage_for_completion_signatures_error_policy::__propagate >::visit
constexpr bool visit(Visitor &&visitor) &&noexcept(nothrow_visitable_< Visitor >)
Definition
storage_for_completion_signatures.hpp:295
experimental::execution::storage_for_completion_signatures< ::stdexec::completion_signatures< Signatures... >, storage_for_completion_signatures_error_policy::__propagate >::arrive
constexpr void arrive(Tag t, Args &&... args) noexcept(std::is_nothrow_constructible_v< tuple_type_< Tag, Args... >, Tag, Args... >)
Definition
storage_for_completion_signatures.hpp:283
experimental::execution::storage_for_completion_signatures< ::stdexec::completion_signatures< Signatures... >, storage_for_completion_signatures_error_policy::__propagate >::nothrow_arrive
static constexpr bool nothrow_arrive
Definition
storage_for_completion_signatures.hpp:262
experimental::execution::storage_for_completion_signatures
Definition
storage_for_completion_signatures.hpp:115
matching_completion_signature.hpp
experimental::execution::detail::storage_for_completion_signatures
Definition
storage_for_completion_signatures.hpp:34
experimental::execution::detail::storage_for_completion_signatures::tuple_for_arrival
typename tuple_for_signature<::exec::matching_completion_signature_t< Signatures, Tag, Args... > >::type tuple_for_arrival
Definition
storage_for_completion_signatures.hpp:60
experimental::execution
Definition
elide.hpp:28
experimental::execution::storage_for_completion_signatures_error_policy
storage_for_completion_signatures_error_policy
Definition
storage_for_completion_signatures.hpp:106
experimental::execution::storage_for_completion_signatures_error_policy::__internalize
@ __internalize
Definition
storage_for_completion_signatures.hpp:107
experimental::execution::storage_for_completion_signatures_error_policy::__propagate
@ __propagate
Definition
storage_for_completion_signatures.hpp:108
experimental::execution::detail::storage_for_completion_signatures::arrival_storable< std::tuple< Tag, StoredArgs... >, Args... >::value
static constexpr bool value
Definition
storage_for_completion_signatures.hpp:100
experimental::execution::detail::storage_for_completion_signatures::arrival_storable
Definition
storage_for_completion_signatures.hpp:96
experimental::execution::detail::storage_for_completion_signatures::decay< T & >::type
T & type
Definition
storage_for_completion_signatures.hpp:43
experimental::execution::detail::storage_for_completion_signatures::decay< T && >::type
T && type
Definition
storage_for_completion_signatures.hpp:48
experimental::execution::detail::storage_for_completion_signatures::decay
Definition
storage_for_completion_signatures.hpp:37
experimental::execution::detail::storage_for_completion_signatures::decay::type
std::decay_t< T > type
Definition
storage_for_completion_signatures.hpp:38
experimental::execution::detail::storage_for_completion_signatures::nothrow_storable< Tag(Args...)>::value
static constexpr bool value
Definition
storage_for_completion_signatures.hpp:92
experimental::execution::detail::storage_for_completion_signatures::nothrow_storable
Definition
storage_for_completion_signatures.hpp:88
experimental::execution::detail::storage_for_completion_signatures::nothrow_visitable< Visitor, Tag(Args...)>::value
static constexpr bool value
Definition
storage_for_completion_signatures.hpp:84
experimental::execution::detail::storage_for_completion_signatures::nothrow_visitable
Definition
storage_for_completion_signatures.hpp:80
experimental::execution::detail::storage_for_completion_signatures::signature< Tag(Args...)>::type
Tag(typename decay< Args >::type...) type
Definition
storage_for_completion_signatures.hpp:76
experimental::execution::detail::storage_for_completion_signatures::signature
Definition
storage_for_completion_signatures.hpp:72
experimental::execution::detail::storage_for_completion_signatures::tuple_for_signature< Tag(Args...)>::type
std::tuple< Tag, typename decay< Args >::type... > type
Definition
storage_for_completion_signatures.hpp:56
experimental::execution::detail::storage_for_completion_signatures::tuple_for_signature
Definition
storage_for_completion_signatures.hpp:52
experimental::execution::detail::storage_for_completion_signatures::variant_for_signatures<::stdexec::completion_signatures< Signatures... > >::type
std::variant< std::monostate, typename tuple_for_signature< Signatures >::type... > type
Definition
storage_for_completion_signatures.hpp:68
experimental::execution::detail::storage_for_completion_signatures::variant_for_signatures
Definition
storage_for_completion_signatures.hpp:64
kokkos-execution
stdexec
P3955
storage_for_completion_signatures.hpp
Generated on
for kokkos-execution by
1.18.0