Using std::expected to return a value or an error
We often need to write a function that returns both some data and an indication of success or failure (either as a bool for the simplest case or an error code for more complex cases). Typically, this can be solved either by returning a status code and using a parameter passed by reference for returning the data or by returning the actual data but throwing exceptions in the case of failure. In recent times, the availability of std::optional and std::variant gave way to new solutions for this problem. However, the C++23 standard provides a new approach with the std::expected type, a sort of combination of the two types previously mentioned. Such a type is present in other programming languages, such as Result in Rust and Either in Haskell. In this recipe, we will learn how to use this new std::expected class.
Getting ready
In the examples shown in this recipe, we will use the data types defined here:
enum class Status
{
...