@@ -32,6 +32,14 @@ template<class... Args>
32
32
Value
33
33
Function::
34
34
operator ()(Args&&... args) const
35
+ {
36
+ return try_invoke (std::forward<Args>(args)...).value ();
37
+ }
38
+
39
+ template <class ... Args>
40
+ Expected<Value>
41
+ Function::
42
+ try_invoke (Args&&... args) const
35
43
{
36
44
typename Array::storage_type elements;
37
45
elements.reserve (sizeof ...(Args));
@@ -42,7 +50,7 @@ operator()(Args&&... args) const
42
50
std::forward<Args>(args)), 0 )... };
43
51
}
44
52
return call (newArray<DefaultArrayImpl>(
45
- std::move (elements))). value () ;
53
+ std::move (elements)));
46
54
}
47
55
48
56
// ------------------------------------------------
@@ -169,6 +177,17 @@ call_impl(
169
177
>::get (clone[I])...);
170
178
return Value (Kind::Undefined);
171
179
}
180
+ else if constexpr (std::same_as<R, Expected<void >>)
181
+ {
182
+ auto exp = f_ (arg_type<std::decay_t <
183
+ std::tuple_element_t <I, args_type> >
184
+ >::get (clone[I])...);
185
+ if (!exp )
186
+ {
187
+ return Unexpected (exp .error ());
188
+ }
189
+ return Value (Kind::Undefined);
190
+ }
172
191
else
173
192
{
174
193
return f_ (arg_type<std::decay_t <
@@ -183,6 +202,17 @@ call_impl(
183
202
>::get (args[I])...);
184
203
return Value (Kind::Undefined);
185
204
}
205
+ else if constexpr (std::same_as<R, Expected<void >>)
206
+ {
207
+ auto exp = f_ (arg_type<std::decay_t <
208
+ std::tuple_element_t <I, args_type> >
209
+ >::get (args[I])...);
210
+ if (!exp )
211
+ {
212
+ return Unexpected (exp .error ());
213
+ }
214
+ return Value (Kind::Undefined);
215
+ }
186
216
else
187
217
{
188
218
return f_ (arg_type<std::decay_t <
@@ -205,6 +235,15 @@ call(Array const& args) const ->
205
235
f_ (args);
206
236
return Value (Kind::Undefined);
207
237
}
238
+ else if constexpr (std::is_same_v<R, Expected<void >>)
239
+ {
240
+ auto exp = f_ (args);
241
+ if (!exp )
242
+ {
243
+ return Unexpected (exp .error ());
244
+ }
245
+ return Value (Kind::Undefined);
246
+ }
208
247
else
209
248
{
210
249
return f_ (args);
0 commit comments