Этот фрагмент кода
#include <tuple>
struct Foo
{
Foo(const int& value):value_(value){}
//Foo(const Foo&)=delete; // delete copy constructor
int value_;
};
int main()
{
std::tuple<Foo> tup(std::move(Foo(1)));
return 0;
}
работает нормально, но если вы удалите конструктор копирования Foo
, произойдет сбой со следующей ошибкой компиляции: использование удаленной функции Foo::Foo(const Foo&)
.
Но, поскольку я прямо указываю, что объект можно перемещать, почему конструктор std::tuple
использует конструктор копирования Foo
вместо конструктора перемещения? Как я могу заставить std::tuple
быть построенным, перемещая экземпляр Foo
вместо его копирования?
Foo&&
, и он удаляется. - person Quentin   schedule 28.09.2015Foo(const Foo&& foo){value_=foo.value_;}
. Я прав? Таким образом, Foo можно перемещать, а не копировать. - person Marco Agnese   schedule 28.09.2015const
аргументов, бесполезны. Смотрите мой ответ. - person Jonathan Wakely   schedule 28.09.2015std::move
с аргументом, который уже является rvalue - person Piotr Skotnicki   schedule 28.09.2015