33
33
Function::
34
34
operator ()(Args&&... args) const
35
35
{
36
- return try_invoke (std::forward<Args>(args)...).value ();
36
+ auto exp = try_invoke (std::forward<Args>(args)...);
37
+ if (exp )
38
+ {
39
+ return *exp ;
40
+ }
41
+ throw Exception (std::move (exp .error ()));
37
42
}
38
43
39
44
template <class ... Args>
@@ -161,27 +166,27 @@ call_impl(
161
166
using R = decltype (
162
167
f_ (arg_type<std::decay_t <
163
168
std::tuple_element_t <I, args_type> >
164
- >::get (args[I] )...));
169
+ >::get (args. get (I) )...));
165
170
if (args.size () < sizeof ...(I))
166
171
{
167
172
Array clone;
168
173
for (std::size_t i = 0 ; i < args.size (); ++i)
169
- clone.emplace_back (args[i] );
174
+ clone.emplace_back (args. get (i) );
170
175
std::size_t const diff = sizeof ...(I) - args.size ();
171
176
for (std::size_t i = 0 ; i < diff; ++i)
172
177
clone.emplace_back (Value (Kind::Undefined));
173
178
if constexpr (std::is_void_v<R>)
174
179
{
175
180
f_ (arg_type<std::decay_t <
176
181
std::tuple_element_t <I, args_type> >
177
- >::get (clone[I] )...);
182
+ >::get (clone. get (I) )...);
178
183
return Value (Kind::Undefined);
179
184
}
180
185
else if constexpr (std::same_as<R, Expected<void >>)
181
186
{
182
187
auto exp = f_ (arg_type<std::decay_t <
183
188
std::tuple_element_t <I, args_type> >
184
- >::get (clone[I] )...);
189
+ >::get (clone. get (I) )...);
185
190
if (!exp )
186
191
{
187
192
return Unexpected (exp .error ());
@@ -192,21 +197,21 @@ call_impl(
192
197
{
193
198
return f_ (arg_type<std::decay_t <
194
199
std::tuple_element_t <I, args_type> >
195
- >::get (clone[I] )...);
200
+ >::get (clone. get (I) )...);
196
201
}
197
202
}
198
203
if constexpr (std::is_void_v<R>)
199
204
{
200
205
f_ (arg_type<std::decay_t <
201
206
std::tuple_element_t <I, args_type> >
202
- >::get (args[I] )...);
207
+ >::get (args. get (I) )...);
203
208
return Value (Kind::Undefined);
204
209
}
205
210
else if constexpr (std::same_as<R, Expected<void >>)
206
211
{
207
212
auto exp = f_ (arg_type<std::decay_t <
208
213
std::tuple_element_t <I, args_type> >
209
- >::get (args[I] )...);
214
+ >::get (args. get (I) )...);
210
215
if (!exp )
211
216
{
212
217
return Unexpected (exp .error ());
@@ -217,7 +222,7 @@ call_impl(
217
222
{
218
223
return f_ (arg_type<std::decay_t <
219
224
std::tuple_element_t <I, args_type> >
220
- >::get (args[I] )...);
225
+ >::get (args. get (I) )...);
221
226
}
222
227
}
223
228
0 commit comments