Listing 1: The implementation of assignment.

StrongStorage& operator=(const StrongStorage& other)
{
    if(this!=&other)
    {
        if(other.isEmpty())
        {
            emptyCache();
        }
        else
        {
            getOtherCache().template 
construct_as<value_type>(other.value());
            emptyCache();
            useCache1=!useCache1;
            cacheInitialized=true;
        }
    }
            
    return *this;
}