boost::variant nicht copy/movable?



  • Huhu,

    Täusche ich mich, oder ist boost::variant weder copy-, noch movable? Gibt es dafür einen Grund?

    Ich habe copy und move emuliert, aber schön ist das natürlich nicht.

    template <typename Variant>
    struct copy_visitor : boost::static_visitor<>
    {
    	const Variant& variant;
    
    	copy_visitor(Variant& variant)
    		: variant(variant)
    	{}
    
    	template <typename T>
    	void operator () (const T& t) const // muss const sein, da boost intern eine const& verwendet
    	{
    		const_cast<Variant&>(variant) = t;
    	}
    };
    
    template <typename Variant>
    struct move_visitor : boost::static_visitor<>
    {
    	const Variant& variant;
    
    	move_visitor(Variant& variant)
    		: variant(variant)
    	{}
    
    	template <typename T>
    	void operator () (T& t) const // wie oben
    	{
    		const_cast<Variant&>(variant) = std::move(t);
    	}
    };
    

    Grüße,
    PI



  • Ich kann das nicht nachvollziehen. Folgendes kompiliert bei mir problemlos:

    #include <boost/variant.hpp>
    
    int main() {
      boost::variant<int, double> v(1.0);
      boost::variant<int, double> v2(v);
    
      v = v2;
    }
    


  • Hm, tatsächlich, nun funktionierts bei mir auch. Hab ich wohl irgendwas anderes falsch gemacht, danke.


Anmelden zum Antworten