24template <concepts::Resultable R>
27 std::cout <<
" " << label <<
": "
28 << (result.is_ok() ?
"OK" :
"ERROR") <<
"\n";
39template <concepts::MonadicResult R>
43 .map([](
const auto& v) {
return v * 2; })
44 .map([](
const auto& v) {
return v + 10; });
51 if constexpr (concepts::Resultable<T>)
53 std::cout <<
" Processing Result type: "
54 << (value.is_ok() ?
"success" :
"failure") <<
"\n";
58 std::cout <<
" Processing non-Result type: " << value <<
"\n";
64 std::cout <<
"=== C++20 Concepts Showcase ===\n\n";
67 std::cout <<
"1. Resultable concept:\n";
68 auto success =
ok(42);
75 static_assert(concepts::Resultable<Result<int>>,
76 "Result<int> must satisfy Resultable");
77 std::cout <<
" static_assert: Result<int> is Resultable\n";
80 std::cout <<
"\n2. Unwrappable concept:\n";
82 std::cout <<
" safe_unwrap(ok(42), -1) = " << val <<
"\n";
85 std::cout <<
" safe_unwrap(error, -1) = " << val2 <<
"\n";
88 std::cout <<
"\n3. MonadicResult concept:\n";
92 std::cout <<
" transform_chain(ok(5)): 5 * 2 + 10 = " << chained.value() <<
"\n";
97 std::cout <<
" transform_chain(error): is_ok = "
98 << (chained_err.is_ok() ?
"true" :
"false") <<
"\n";
101 std::cout <<
"\n4. Concept-based dispatch:\n";
107 std::cout <<
"\n5. Compile-time type traits:\n";
108 std::cout <<
" Result<int> is Resultable: "
109 << concepts::Resultable<Result<int>> <<
"\n";
110 std::cout <<
" Result<int> is Mappable: "
111 << concepts::Mappable<Result<int>> <<
"\n";
112 std::cout <<
" int is Resultable: "
113 << concepts::Resultable<int> <<
"\n";
115 std::cout <<
"\nDone.\n";
Result type for error handling with member function support.
T unwrap_or(T default_value) const
Get value or return default.
Core C++20 concepts for Result/Optional types.
auto transform_chain(R result)
void process(const T &value)
T safe_unwrap(const Result< T > &val, const T &fallback)
void inspect_result(const R &result, const std::string &label)
constexpr int INVALID_ARGUMENT
constexpr int INTERNAL_ERROR
Result< T > make_error(int code, const std::string &message, const std::string &module="")
Create an error result with code and message.
VoidResult ok()
Create a successful void result.
Umbrella header for Result<T> type and related utilities.