Concept Subspace :: sus :: ops :: TryDefault

template <class T>
concept TryDefault
requires
sus::ops::Try<T>
requires {
  // from_default() construct the Try type with the default value for its
  // success type.
  { TryImpl<std::remove_const_t<T>>::from_default() } -> std::same_as<T>;
}

Identifies Try types which can be constructed with a default success value.

This takes the place of the unit (void) type in Rust types, such as Option<()> and Result<(), E> since void is not a constructible type in C++. But by satisfying TryDefault, Result<void, E> can be constructed with a default success value of nothing.