2 title = "`BOOST_OUTCOME_TRYX_FAILURE_LIKELY(expr)`"
3 description = "Evaluate an expression which results in an understood type, emitting the `T` if successful, immediately returning `try_operation_return_as(X)` from the calling function if unsuccessful."
6 Evaluate an expression which results in a type matching the following customisation points, emitting the `T` if successful, immediately returning {{% api "try_operation_return_as(X)" %}} from the calling function if unsuccessful:
8 - `BOOST_OUTCOME_V2_NAMESPACE::`{{% api "try_operation_has_value(X)" %}}
9 - `BOOST_OUTCOME_V2_NAMESPACE::`{{% api "try_operation_return_as(X)" %}}
10 - `BOOST_OUTCOME_V2_NAMESPACE::`{{% api "try_operation_extract_value(X)" %}}
12 Default overloads for these customisation points are provided. See [the recipe for supporting foreign input to `BOOST_OUTCOME_TRY`]({{% relref "/recipes/foreign-try" %}}).
14 Hints are given to the compiler that the expression will be unsuccessful. If you expect success, you should use {{% api "BOOST_OUTCOME_TRYX(expr)" %}} instead.
16 *Availability*: GCC and clang only. Use `#ifdef BOOST_OUTCOME_TRYX` to determine if available.
18 *Overridable*: Not overridable.
20 *Definition*: See {{% api "BOOST_OUTCOME_TRYV(expr)" %}} for most of the mechanics.
22 This macro makes use of a proprietary extension in GCC and clang to emit the `T` from a successful expression. You can thus use `BOOST_OUTCOME_TRYX(expr)` directly in expressions e.g. `auto x = y + BOOST_OUTCOME_TRYX(foo(z));`.
24 Be aware there are compiler quirks in preserving the rvalue/lvalue/etc-ness of emitted `T`'s, specifically copy or move constructors may be called unexpectedly and/or copy elision not work as expected. If these prove to be problematic, use {{% api "BOOST_OUTCOME_TRY(var, expr)" %}} instead.
26 *Header*: `<boost/outcome/try.hpp>`