is_result
template <class>
struct is_result : std::false_type {};
template <class T, class E>
struct is_result<result<T, E>> : std::true_type {};
template <class T>
inline constexpr bool is_result_v = is_result<T>::value;
is_result_with
template <class, class...>
struct is_result_with : std::false_type {};
template <class T, class E>
struct is_result_with<result<T, E>, success<T>> : std::true_type {};
template <class T, class E>
struct is_result_with<result<T, E>, failure<E>> : std::true_type {};
template <class T, class E>
struct is_result_with<result<T, E>, success<T>, failure<E>> : std::true_type {};
template <class T, class... Requires>
inline constexpr bool is_result_with_v = is_result_with<T, Requires...>::value;