我使用這個代碼:爲什麼C++ Builder無法編譯這個?
#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;
}
如果我使用一些在線編譯它編譯OK,但兩者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
我用默認的編譯器/ IDE設置做我不知道爲什麼會發生這種情況?
有人有C++ Builder XE3或更高版本確認此問題?
聽起來像是標準庫中的一個bug還是對prvalues的處理?嘗試'vInt.emplace_back()'而不是'vInt.push_back()'。 – tclamb
它不識別emplace_back方法。剛在XE6上試了一下。由於上面的代碼在GNU GCC版本4.7.2上工作,我不明白爲什麼它不會在這裏工作。我認爲這是C++ Builder的問題? – Tracer
就是這樣。看起來C++ Builder沒有實現C++ 11。聽起來像你堅持'std :: auto_ptr'。 – tclamb