rename unexpected by unexpected_type as there is already std::unexpected. Added has_exception.