For optional's template<class U = T> optional<T>& operator=(U&& v); the standard demands that (see [optional.assign]/3.16):
This function shall not participate in overload resolution unless ...
conjunction_v<is_scalar<T>, is_same<T, decay_t<U>>>isfalse...
Why do we have to exclude case when assigning a scalar of type U == T?