向量emplace_back要求和unique_ptr成员

时间:2018-06-22 04:55:03

标签: c++

以下代码无法编译(至少在我尝试过的g ++ / clang版本中)。 godbolt link

struct T {
    std::unique_ptr<double> p;

    T() {}
    T(const T&) {}
    T(T&&) {}
};

struct X {
    T t;
    std::vector<std::unique_ptr<int>> f;
};

int main()
{
    std::vector<X> y;
    X x;
    y.emplace_back(std::move(x));
}

具体来说,编译器似乎抱怨在vector<unique_ptr<int>>上调用已删除的副本构造函数,这对我来说没有意义。

requirements似乎或多或少说emplace_back应该在移动构造函数中起作用。由于没有X的用户声明的构造函数,也没有无法移动的成员/基类,因此我认为move构造函数应隐式声明而不删除。

一些“修正”:

有人可以解释为什么原始代码格式错误吗?以及为什么“修复程序”(通常是前3个,尤其是第3个)使代码可以编译?

0 个答案:

没有答案