what do you think about how `value` throws exceptions on `std::expected` but `error` has UB
One possible reason could be that value is meant to be called when it is known that std::expected contains a value, so throwing an exception is a reasonable way to handle the case when that precondition is not met