26 if (denominator == 0) {
31 "Cannot divide by zero"
34 return ok(numerator / denominator);
46 std::cout <<
"=== Improved unwrap() Error Messages Demo ===\n\n";
49 std::cout <<
"1. Result<T>::unwrap() with error:\n";
50 std::cout <<
"-----------------------------------\n";
52 auto result =
divide(10, 0);
54 int value = result.unwrap();
55 std::cout <<
"Value: " << value <<
"\n";
56 }
catch (
const std::exception& e) {
57 std::cout <<
"Exception caught:\n" << e.what() <<
"\n\n";
61 std::cout <<
"2. Optional<T>::unwrap() with None:\n";
62 std::cout <<
"------------------------------------\n";
66 std::string name = user.unwrap();
67 std::cout <<
"User: " << name <<
"\n";
68 }
catch (
const std::exception& e) {
69 std::cout <<
"Exception caught:\n" << e.what() <<
"\n\n";
73 std::cout <<
"3. Safe alternatives to unwrap():\n";
74 std::cout <<
"----------------------------------\n";
76 auto result =
divide(10, 0);
79 int value1 = result.unwrap_or(0);
80 std::cout <<
"unwrap_or(0): " << value1 <<
"\n";
84 std::cout <<
"Value: " << result.value() <<
"\n";
86 auto error = result.error();
87 std::cout <<
"Error: " << error.message <<
"\n";
88 std::cout <<
" Code: " << error.code <<
"\n";
89 std::cout <<
" Module: " << error.module <<
"\n";
94 std::cout <<
"Value via is_ok check: " << result.value() <<
"\n";
96 std::cout <<
"Result is in error state\n";
100 auto doubled =
divide(10, 2)
101 .map([](
int x) {
return x * 2; })
103 std::cout <<
"Monadic map result: " << doubled <<
"\n";
105 std::cout <<
"\n=== Demo Complete ===\n";
Optional type similar to std::optional with Rust-like API.
Result type for error handling with member function support.
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.
Optional< std::string > find_user(int id)
void demonstrate_improved_error_messages()
Result< int > divide(int numerator, int denominator)