As any type can be thrown as an exception, should `expected<T,E>` throw `E` instead of `bad_expected_access<E>`? If yes, should `optional<T>` throw `nullopt_t` to be coherent?