home | help
std::optional::or_else(3)      C++ Standard Libary     std::optional::or_else(3)

NAME
     std::optional::or_else - std::optional::or_else

Synopsis
	template< class F >			    (1) (since C++23)
	constexpr optional or_else( F&& f ) const&;
	template< class F >			    (2) (since C++23)
	constexpr optional or_else( F&& f ) &&;

	Returns  *this	if it contains a value. Otherwise, returns the result of
     f.

	The  program  is   ill-formed	if   std::remove_cvref_t<std::invoke_re-
     sult_t<F>> is not
	same as std::optional<T>.

	1)  Equivalent	to  return  *this  ? *this : std::forward<F>(f)();. This
     overload
	participates  in  overload  resolution	only  if   both   std::copy_con-
     structible<T> and
	std::invocable<F> are modeled.
	2)   Equivalent   to   return	*this  ?  std::move(*this)  :  std::for-
     ward<F>(f)();. This
	overload participates in overload resolution only if both std::move_con-
     structible<T>
	and std::invocable<F> are modeled.

Parameters
	f - a function or Callable object that returns an std::optional<T>

Return value
	*this or the result of f, as described above.

Notes
	Feature-test macro  Value    Std		 Feature
	__cpp_lib_optional 202110L (C++23) Monadic operations in std::optional

Example
     // Run this code

      #include <iostream>
      #include <optional>
      #include <string>

      int main()
      {
	  using maybe_int = std::optional<int>;

	  auto valueless = []
	  {
	      std::cout << "Valueless: ";
	      return maybe_int{0};
	  };

	  maybe_int x;
	  std::cout << x.or_else(valueless).value() << '\n';

	  x = 42;
	  std::cout << "Has value: ";
	  std::cout << x.or_else(valueless).value() << '\n';

	  x.reset();
	  std::cout << x.or_else(valueless).value() << '\n';
      }

Output:
      Valueless: 0
      Has value: 42
      Valueless: 0

See also
	value_or  returns the contained value if available, another value other-
     wise
		  (public member function)
	and_then  returns the result of the  given  function  on  the  contained
     value if it
	(C++23)   exists, or an empty optional otherwise
		  (public member function)
	transform returns an optional containing the transformed contained value
     if it
	(C++23)   exists, or an empty optional otherwise
		  (public member function)

http://cppreference.com 	   2024.06.10	       std::optional::or_else(3)

home | help