混合boost的multi_array和可选的C++ 11 unique_ptr不起作用

Hos*_*ork 5 c++ boost-multi-array unique-ptr c++11 boost-optional

我用G ++ 4.7组建了一个前沿设置(虽然目前我还在使用sudo apt-get boost-all-devDebian Wheezy 附带的boost 1.48 ).

我的代码设置在使用的逻辑数据结构是unique_ptr的多维数组.但是multi_array,如果其中有unique_ptr,似乎也无法构造一个空的单元素数组.这样可行:

boost::multi_array<int, 1> arrWorks (boost::extents[1]);
Run Code Online (Sandbox Code Playgroud)

但这不是:

boost::multi_array< unique_ptr<int>, 1> arrFails (boost::extents[1]);
Run Code Online (Sandbox Code Playgroud)

我想编译器的相关抱怨是:

/usr/include/c++/4.7/bits/stl_uninitialized.h:225:从'void std :: uninitialized_fill_n(_ForwardIterator,_Size,const _Tp&)[with _ForwardIterator = std :: unique_ptr*; _Size = unsigned int; _Tp = std :: unique_ptr]'

optional< unique_ptr<...> >即使我应用了这里提供的补丁,我也遇到了一些问题:

https://svn.boost.org/trac/boost/ticket/1841

(注意:找到通过是否可以移动boost :: optional?)

例如:

boost::optional< unique_ptr<int> > optWorks (new int);

// Fails
boost::optional< unique_ptr<int> > optFails (std::move(optWorks));
Run Code Online (Sandbox Code Playgroud)

我觉得我正在做的事情是合法的.事实上,我已经通过将unique_ptr合并到这个项目中,在所有权转移语义方面发现了一些错误.所以我不想说"哦,这太复杂了,只需使用原始指针".

这是支持推动议程吗?它有时间表吗?我可以在此期间使用任何简单的解决方法吗?

alf*_*lfC 0

Boost.MultiArray 不支持仅移动元素。

要么使用支持仅移动元素的数组库(例如这个) ,要么只使用std::vector.

请参阅示例: https: //godbolt.org/z/nsMf7x3Tv