LINUX.ORG.RU

История изменений

Исправление 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;
    }
}