Evaluate an expression which results in a type matching the following customisation points, continuing execution if successful, immediately returning
from the calling function if unsuccessful:
Default overloads for these customisation points are provided. See the recipe for supporting foreign input to
The difference between the
OUTCOME_TRY(expr) editions is that the latter will set a variable if two or more macro arguments are present (see
). The former requires the
T to be
Hints are given to the compiler that the expression will be successful. If you expect failure, you should use
An internal temporary to hold the value of the expression is created, which generally invokes a copy/move. If you wish to never copy/move, you can tell this macro to create the internal temporary as a reference instead.
Overridable: Not overridable.
Definition: Firstly the expression’s temporary is bound to a uniquely named, stack allocated,
auto &&. If that reference’s bound object’s
try_operation_has_value() is false, immediately execute
return try_operation_return_as(propagated unique reference);, propagating the rvalue/lvalue/etc-ness of the original expression.