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
{
...