Я пытался определить конструктор перемещения по умолчанию в классе с переменной-членом boost::Optional
.
#include <boost/optional.hpp>
#include <utility>
#include <vector>
struct bar {std::vector<int> vec;};
struct foo {
foo() = default;
foo(foo&&) = default;
boost::optional<bar> hello;
};
int main() {
foo a;
foo b(std::move(a));
}
Мой компилятор поддерживает как семантику перемещения, так и конструкторы перемещения по умолчанию, но я не могу заставить это работать.
% clang++ foo.cc -std=c++11 -stdlib=libc++ foo.cc:15:7: ошибка: вызов удаленного конструктора 'foo' foo b(std::move(a)); ^ ~~~~~~~~~~~~~ foo.cc:9:3: примечание: здесь функция явно помечена как удаленная foo(foo&&) = по умолчанию; ^ Произошла 1 ошибка.
Есть ли способ переместить boost::Optional
безизменения исходного кода Boost? Или мне следует подождать, пока Boost не поддержит перемещение?
У меня была такая же проблема с boost::any
в прошлом.