If rhs holds the same alternative type as this object, copy assign the contained value of rhs to the contained value of this object. Otherwise, destroy the contained value of this object (if any) and, if rhs holds a value, copy-construct the corresponding alternative of this object from the contained value of rhs. The allocators of this object and rhs both remain unchanged. This operator is deleted unless all alternatives are copy constructible and copy assignable. If the construction of a new alternative object exits via an exception, this variant object is left in a valueless by exception state. This is different from the standard, which requires a temporary copy of rhs to be made if copy construction of the active alternative is not noexcept (see [variant.assign]for details). The standard behavior causes unnecessary performance degradation in cases where the alternative constructor does not throw, yet is not marked noexcept; this behavior is therefore not implemented in bsl::variant. For simplicity of implementation, this method also differs from the standard in the following ways: * conditional triviality is not implemented * constexpr is not implemented * noexcept specification is not implemented