If T models default_initializable, the default
constructor of semiregular-box<T> is equivalent to:
constexprsemiregular-box()noexcept(is_nothrow_default_constructible_v<T>):semiregular-box{in_place}{}
If assignable_from<T&, const T&> is not
modeled, the copy assignment operator is equivalent to:
semiregular-box&operator=(constsemiregular-box& that)noexcept(is_nothrow_copy_constructible_v<T>){if(that) emplace(*that);
else reset();
return*this;
}
If assignable_from<T&, T> is not modeled,
the move assignment operator is equivalent to:
semiregular-box&operator=(semiregular-box&& that)noexcept(is_nothrow_move_constructible_v<T>){if(that) emplace(std::move(*that));
else reset();
return*this;
}