为什么C++ Builder无法编译呢?

Tra*_*cer 2 c++ pointers vector c++builder c++11

我正在使用此代码:

#include <iostream>
#include <memory>
#include <vector>
using namespace std;

void out(int* p){
    cout << *p;
}

int main(){
    vector<unique_ptr<int> > vInt;

    for(int i = 0; i < 10; i++)
        vInt.push_back(unique_ptr<int>(new int(i)));

    out(vInt[0].get()); // 0
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果我使用一些在线编译器,它编译好,但C++ Builder XE2和XE6报告错误:

[bcc32 Error] vector(1179): E2247 'unique_ptr<int,default_delete<int> >::unique_ptr(const unique_ptr<int,default_delete<int> > &)' is not accessible
[bcc32 Error] vector(1203): E2247 'unique_ptr<int,default_delete<int> >::unique_ptr(const unique_ptr<int,default_delete<int> > &)' is not accessible
[bcc32 Error] xutility(1682): E2247 'operator unique_ptr<int,default_delete<int> >::=(const unique_ptr<int,default_delete<int> > &)' is not accessible
[bcc32 Error] xutility(1552): E2247 'operator unique_ptr<int,default_delete<int> >::=(const unique_ptr<int,default_delete<int> > &)' is not accessible
[bcc32 Error] xmemory(28): E2247 'unique_ptr<int,default_delete<int> >::unique_ptr(const unique_ptr<int,default_delete<int> > &)' is not accessible
Run Code Online (Sandbox Code Playgroud)

我使用默认的编译器/ IDE设置我不知道为什么会这样?

有人使用C++ Builder XE3或更高版本可以确认此问题吗?

Siy*_*Ren 5

这是一个编译器错误/无法正确实现C++ 11标准.push_back有两个重载,一个是const左值引用,另一个是右值引用.你的代码非常好,因为在vInt.push_back(unique_ptr<int>(new int(i)));创建时unique_ptr是一个临时的,应绑定到右值引用然后移入存储.

我没有C++构建器,所以我不知道哪些变通办法可行.如果碰巧实现,emplace_back你可以使用它.否则,你可能会诉诸boost::container::vectorboost.ptr_container.