Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::expected<T,E>::and_then

      From cppreference.com
      <cpp‎ |utility‎ |expected
       
       
      Utilities library
       
       
      Main template
      template<class F>
      constexprauto and_then( F&& f)&;
      (1)(since C++23)
      template<class F>
      constexprauto and_then( F&& f)const&;
      (2)(since C++23)
      template<class F>
      constexprauto and_then( F&& f)&&;
      (3)(since C++23)
      template<class F>
      constexprauto and_then( F&& f)const&&;
      (4)(since C++23)
      void partial specialization
      template<class F>
      constexprauto and_then( F&& f)&;
      (5)(since C++23)
      template<class F>
      constexprauto and_then( F&& f)const&;
      (6)(since C++23)
      template<class F>
      constexprauto and_then( F&& f)&&;
      (7)(since C++23)
      template<class F>
      constexprauto and_then( F&& f)const&&;
      (8)(since C++23)

      If*this represents an expected value, invokesf and returns its result. Otherwise, returns astd::expected object that contains an unexpected value, which is initialized with the unexpected value of*this.

      1-4)f is invoked with the expected valueval as the argument.
      5-8)f is invoked without any argument.

      Given typeU as:

      1,2)std::remove_cvref_t<std::invoke_result_t<F, decltype((val))>>
      3,4)std::remove_cvref_t<std::invoke_result_t<F, decltype(std::move(val))>>
      5-8)std::remove_cvref_t<std::invoke_result_t<F>>

      IfU is not a specialization ofstd::expected, orstd::is_same_v<U::error_type, E> isfalse, the program is ill-formed.

      1,2) These overloads participate in overload resolution only ifstd::is_constructible_v<E, decltype(error())> istrue.
      3,4) These overloads participate in overload resolution only ifstd::is_constructible_v<E, decltype(std::move(error()))> istrue.
      5,6) These overloads participate in overload resolution only ifstd::is_constructible_v<E, decltype(error())> istrue.
      7,8) These overloads participate in overload resolution only ifstd::is_constructible_v<E, decltype(std::move(error()))> istrue.

      Contents

      [edit]Parameters

      f - a suitable function orCallable object that returns astd::expected

      [edit]Return value

       Overload Value ofhas_value()
      truefalse
      (1,2)std::invoke(std::forward<F>(f), val)U(std::unexpect, error())
      (3,4)std::invoke(std::forward<F>(f),std::move(val))U(std::unexpect, std::move(error()))
      (5,6)std::invoke(std::forward<F>(f))U(std::unexpect, error())
      (7,8)U(std::unexpect, std::move(error()))

      [edit]Notes

      Feature-test macroValueStdFeature
      __cpp_lib_expected202211L(C++23)Monadic functions forstd::expected

      [edit]Example

      This section is incomplete
      Reason: no example

      [edit]Defect reports

      The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

      DRApplied toBehavior as publishedCorrect behavior
      LWG 3938C++23the expected value was obtained byvalue()[1]changed to**this
      LWG 3973C++23the expected value was obtained by**this[2]changed toval
      1. value() requiresE to be copy constructible (seeLWG issue 3843), whereoperator* does not.
      2. **this can triggerargument-dependent lookup.

      [edit]See also

      in-place construction tag for unexpected value inexpected
      (tag)[edit]
      returns anexpected containing the transformed expected value if it exists; otherwise, returns theexpected itself
      (public member function)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/utility/expected/and_then&oldid=173419"

      [8]ページ先頭

      ©2009-2025 Movatter.jp