std::expected — holds either a value or an error. Modern alternative to exceptions and error codes.
1#include <expected>23std::expected<int, std::string> divide(int a, int b) {4 if (b == 0) {5 return std::unexpected("Division by zero");6 }7 return a / b;8}910auto result = divide(10, 3);11if (result.has_value()) {12 std::cout << *result; // 313} else {14 std::cout << result.error(); // Division by zero15}1617// Chaining with and_then18auto result2 = divide(10, 2)19 .and_then([](int val) {20 return divide(val, 1);21 });2223// Transform value24auto result3 = divide(10, 2)25 .transform([](int val) { return val * 10; });26// result3 = 502728// Value or default29int val = divide(10, 0).value_or(0); // 0
Benefits: