我一直试图在一个带有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: error:调用已删除的foo foo b构造函数(std::move(A));^ foo.cc:9:3:注意:函数已显式标记在foo(foo&&) = default;^1错误生成。
有没有一种无需修改Boost的源代码就可以移动boost::optional的方法?还是我应该等到Boost支持移动?
我过去对boost::any也有过同样的问题。
发布于 2014-09-22 15:20:47
只有在Boost版本1.56之后,Boost.Optional才支持移动构造。见发布说明。
https://stackoverflow.com/questions/10783391
复制相似问题