25     using type = std::reference_wrapper<T>;
 
   30 template<
class return_t, 
class... args_t>
 
   33     using return_type = 
typename details::select_reference<return_t>::type;
 
   36     std::optional<return_type> optResult;
 
   39         [&nArg, &optResult]<
class T>(T&& arg)
 
   41             if (nArg++ == 
sizeof...(args_t) || predicates::is_valid(arg))
 
   43                 optResult = 
static_cast<return_type
>(std::forward<T>(arg));
 
   50         }(std::forward<args_t>(args))
 
   53     return std::move(*optResult);
 
   56 template<
class... args_t>
 
   58 constexpr 
auto coalesce(args_t&&... args)
 
   63     std::optional<return_type> optResult;
 
   66         [&nArg, &optResult]<
class T>(T&& arg)
 
   68             if (nArg++ == 
sizeof...(args_t) || predicates::is_valid(arg))
 
   70                 optResult = std::forward<T>(arg);
 
   77         }(std::forward<args_t>(args))
 
   80     return std::move(*optResult);
 
constexpr return_t coalesce(args_t &&... args)
Coalesce function, C# a ?? b analogue.
 
requires(same_variadic_args_v< args_t... >) const expr auto coalesce(args_t &&... args)
Coalesce function, C# a ?? b analogue.