Understand Internals of std::expected -- Bartlomiej Filipek
In the article about std::expected, I introduced the type and showed some basic examples, and in this text, you’ll learn how it is implemented.
Understand Internals of std::expected
by Bartlomiej Filipek
From the article:
In short,
std::expectedshould contain two data members: the actual expected value and the unexpected error object. So, in theory, we could use a simple structure:template <class _Ty, class _Err> struct expected { /*... lots of code ... */ _Ty _Value; _Err _Unexpected; };However, there are better solutions than this. Here are some obvious issues for our “struct” approach.
- The size of the object is the sum of the Value type and the Error type (plus padding if needed).
- Two data members are “active” and initialized, which might not be possible - for example, what if the Value type has no default constructor? The Standard requires that
std::expected" holds either a value of typeTor an error of typeE` within its storage.- We’d have to guarantee that
_Tycannot be a reference type or an array type; it must be aDestructibleType.- Similarly for the
_Errtype we have to guarantee that it’s alsoDestructible, and must be a valid template argument forstd::unexpected(so not an array, non-object type, nor cv-qualified type).- Plus, we’d have to write a lot of code that creates an API for the type

Registration is now open for CppCon 2024! The conference starts on September 15 and will be held
In Qt 4, container classes like QVector introduced an optimization that transformed certain operations on contained objects into efficient byte-level manipulations. By identifying types that can be safely moved via a simple memory copy, Qt was able to streamline reallocations for specific data types like 
Registration is now open for CppCon 2024! The conference starts on September 15 and will be held
Registration is now open for CppCon 2024! The conference starts on September 15 and will be held