Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

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_constructible<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::op-
       tional

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
       otherwise
		    (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)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::optional::or_else&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help