Есть ли в boost::tuple 1.55 семантика перемещения?

В версии 1.55 есть кортежи повышения, кажется, что она должна быть, но когда я хочу скомпилировать следующее:

  boost::tuple< A, int  > t(  boost::tuples::make_tuple(A(2), 3)   );
  //OR
  boost::tuple<A,int> t(A(2),3);

где класс A a имеет конструктор перемещения. Я получаю следующую ошибку:

/usr/local/include/boost/tuple/detail/tuple_basic.hpp|310|error:   
use of deleted function 'A::A(const A&)'|

что, конечно, потому что я определил конструктор перемещения и нет конструктора копирования в этом классе!

пример для класса A:

class A{
public:

    explicit A(int i){
        std::cout << "Constructor "<< i <<std::endl;
        for(int l = 0; l<i;l++){
            vec.push_back(l);
        }
    };

    A(A && ref): vec(std::move(ref.vec))
    {
       std::cout << "Move constructor"<<std::endl;
    }

    A & operator=(A && ref){
       if(this != &ref){
            vec = std::move(ref.vec);
       }
       std::cout << "Move assignment"<<std::endl;
       return *this;

    }

    std::vector<int> vec;
};

0 ответов

Другие вопросы по тегам