template<typename T>
Variant &operator=(const T &v) { assign(v); return *this; }
Variant &operator=(const Variant &v) { if(&v!=this) copy_from(v); return *this; }
template<typename T>
Variant &operator=(const T &v) { assign(v); return *this; }
Variant &operator=(const Variant &v) { if(&v!=this) copy_from(v); return *this; }