Есть ли в 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;
};