Можно ли переместить boost::Optional?

Я пытался определить конструктор перемещения по умолчанию в классе с переменной-членом 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в прошлом.

25
задан R. Martinho Fernandes 28 May 2012 в 15:02
поделиться