A clone_ptr that does not require T to have a clone method
Prefer to use Copy and Swap Idiom

clone_ptr&amp; operator=( const clone_ptr&amp; other )
{
    clear();
    ptr = other.cloner(other.ptr);
    cloner = other.cloner;
    return *this;
}


Or

clone_ptr&amp; operator=(clone_ptr copy)
{
    copy.swap(*this);
    return *this;
}


No need to clear on move assignment

clone_ptr&amp; operator=( clone_ptr&amp;&amp; other )
{
    // clear();   No need to do that.
                  The destructor of `other` will do that at some point.
    swap(other);
    return *this;
}


Easier to write as:

clone_ptr&amp; operator=(clone_ptr copy)
{
    copy.swap(*this);
    return *this;
}


Personally I don't see the point in havin output() and operator&lt;&lt;

I would just combine them into operator&lt;&lt; and make it a friend (also declare it in the class).