I have noticed the following circumstance that specifies rhs.error() be copied instead of moved:
expected<T, E>& operator=(unexpected<G>&& e);
For the case !bool(*this), it says: "move assign unexpected(e.error()) to unex"
I think it should be: "move assign unexpected(std::move(e.error())) to unex", given the is_nothrow_move_constructible_v<E> constraint.
I'm guessing it's a copy-paste error, or am I missing something?
Cheers,
Emile Cormier