Gcc NDK C++;11,调用已删除的构造函数错误

Gcc NDK C++;11,调用已删除的构造函数错误,gcc,c++11,android-ndk,clang,Gcc,C++11,Android Ndk,Clang,我有一个名为RenderCommand的类: class RenderCommand { public: RenderCommandType commandType; RenderCommand() : commandType(RenderCommandTypeNone) {}; virtual ~RenderCommand() {}; }; 然后,我有一个包含这些RenderCommands的队列,其中存储了对它们唯一的\u ptr: typedef std::de

我有一个名为RenderCommand的类:

class RenderCommand
{
public:
    RenderCommandType commandType;

    RenderCommand() : commandType(RenderCommandTypeNone) {};
    virtual ~RenderCommand() {};
};
然后,我有一个包含这些RenderCommands的队列,其中存储了对它们唯一的\u ptr:

typedef std::deque<std::unique_ptr<RenderCommand>> RenderQueue;
EDIT2:Ok这似乎是一个std::deque问题,将RenderQueue更改为:

typedef std::vector<std::unique_ptr<RenderCommand>> RenderQueue;
typedef std::vector RenderQueue;
工作。另外,删除对我自己类的引用并仅使用int仍然不起作用(除非像上面那样,我将deque替换为vector):

std::vector tempQueue;
tempQueue.resize(4);

:-/

我把你的例子简化为

#include <deque>
#include <vector>

struct A {
    A(const A&) = delete;
};

void f()
{
    std::vector<std::deque<A> > q;
    q.resize(4);
}
deque
替换为
vector
list
不会显示此行为


因此,这似乎是从g++4.6到4.7的回归,或者是对以前错误的修正。无论如何,我用g++提交了一份bug报告,请参见

让我用心灵感应猜测:RenderCommandType是否已删除、无法访问或模棱两可的移动构造函数,或者不可复制?请将RenderCommandType定义添加到您的问题中。很抱歉造成混淆,RenderCommandType只是一个枚举,将其添加到原始问题中。也许这个答案有帮助,谢谢。我以前看到过,但认为这并不完全相关,因为他们试图使用TBB,而我尝试使用标准容器。这是否意味着NDK中的std::deque还不支持std::move?感谢您的测试!我还向Android提交了一份bug报告,但(可能是错误的):好吧,让我们看看他们从中得到了什么。他们要么承认并纠正它,要么能够解释为什么这是正确的行为。
required from '_ForwardIterator std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator, std::allocator<_Tp>&) [with _InputIterator = std::_Deque_iterator<std::unique_ptr<RenderCommand>, const std::unique_ptr<RenderCommand>&, const std::unique_ptr<RenderCommand>*>; _ForwardIterator = std::_Deque_iterator<std::unique_ptr<RenderCommand>, std::unique_ptr<RenderCommand>&, std::unique_ptr<RenderCommand>*>; _Tp = std::unique_ptr<RenderCommand>]'
enum RenderCommandType
{
    RenderCommandTypeNone = 0,
    RenderCommandTypeBeginRepeat,
    RenderCommandTypeEndRepeat,
    RenderCommandTypeBeginScene,
    RenderCommandTypeEndScene,
    //etc
};
typedef std::vector<std::unique_ptr<RenderCommand>> RenderQueue;
std::vector<std::deque<std::unique_ptr<int>>> tempQueue;
tempQueue.resize(4);
#include <deque>
#include <vector>

struct A {
    A(const A&) = delete;
};

void f()
{
    std::vector<std::deque<A> > q;
    q.resize(4);
}
error: use of deleted function ‘A::A(const A&)’