information to be attached to describe the error. This is similar to the way C++
exceptions allow throwing of user-defined types.
-Success values are created by calling ``Error::success()``:
+Success values are created by calling ``Error::success()``, E.g.:
.. code-block:: c++
impact on program performance.
Failure values are constructed using ``make_error<T>``, where ``T`` is any class
-that inherits from the ErrorInfo utility:
+that inherits from the ErrorInfo utility, E.g.:
.. code-block:: c++
For functions that can fail but need to return a value the ``Expected<T>``
utility can be used. Values of this type can be constructed with either a
-``T``, or a ``Error``. Expected<T> values are also implicitly convertible to
+``T``, or an ``Error``. Expected<T> values are also implicitly convertible to
boolean, but with the opposite convention to Error: true for success, false for
error. If success, the ``T`` value can be accessed via the dereference operator.
If failure, the ``Error`` value can be extracted using the ``takeError()``
Expected<float> parseAndSquareRoot(IStream &IS) {
float f;
- OS >> f;
+ IS >> f;
if (f < 0)
return make_error<FloatingPointError>(...);
return sqrt(f);