¿Es posible mover un impulso :: opcional?
He estado tratando de definir un constructor de movimiento predeterminado en una clase con unboost::optional
variable miembro
#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));
}
Mi compilador es compatible tanto con la semántica de movimiento como con los constructores de movimiento predeterminados, pero no puedo hacer que esto funcione.
% clang++ foo.cc -std=c++11 -stdlib=libc++
foo.cc:15:7: error: call to deleted constructor of 'foo'
foo b(std::move(a));
^ ~~~~~~~~~~~~
foo.cc:9:3: note: function has been explicitly marked deleted here
foo(foo&&) = default;
^
1 error generated.
¿Hay alguna manera de mover unboost::optional
sin ¿Está modificando el código fuente de Boost? ¿O debería esperar hasta que Boost soporte el movimiento?
Tuve el mismo problema conboost::any
en el pasado.