История изменений
Исправление static_lab, (текущая версия) :
std::expected (C++23) с монадическими методами:
std::expected<int, std::string> fn1(int v) {
if (v < 0) {
return std::unexpected("Value too small");
}
return v * 2;
}
std::expected<int, std::string> fn2(int v);
std::expected<int, std::string> fn3(int v);
void calc(int initialValue) {
auto result = fn1(initialValue)
.and_then(fn2)
.and_then(fn3);
if (result.has_value()) {
std::cout << "Result: " << result.value() << std::endl;
} else {
std::cout << "Error: " << result.error() << std::endl;
}
}
Исходная версия static_lab, :
std::expected (C++23) с монадическими методами:
std::expected<int, std::string> fn1(int v);
std::expected<int, std::string> fn2(int v);
std::expected<int, std::string> fn3(int v);
void calc(int initialValue) {
auto result = fn1(initialValue)
.and_then(fn2)
.and_then(fn3);
if (result.has_value()) {
std::cout << "Result: " << result.value() << std::endl;
} else {
std::cout << "Error: " << result.error() << std::endl;
}
}