История изменений
Исправление 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;
    }
}