2013-02-27 115 views
2

我正嘗試使用clang在舊版RHEL5機器上編譯一些代碼,該機器使用libstdc++4.4.7。當我使-std=c++0x標誌,我得到:使用clang編譯失敗,使用libstdC++ 4.4.7和-std = C++ 0x

/usr/lib/gcc/i386-redhat-linux6E/4.4.7/../../../../include/c++/4.4.7/bits/vector.tcc:380:19: error: call to implicitly-deleted copy constructor of 
    'value_type' (aka 'std::pair<double, double>') 
      value_type __x_copy = __x; 
        ^  ~~~ 
/usr/lib/gcc/i386-redhat-linux6E/4.4.7/../../../../include/c++/4.4.7/bits/stl_vector.h:851:9: note: in instantiation of member function 
    'std::vector<std::pair<double, double>, std::allocator<std::pair<double, double> > >::_M_fill_insert' requested here 
    { _M_fill_insert(__position, __n, __x); } 

這是我在clang site應用patch(其中固定其他錯誤,但不是這一個)之後。當我禁用-std=c++0x它工作正常。這聽起來像補丁可能沒有解決所有的問題,這是一個已知的問題,是否有一個已知的修復?

+0

@Zoidberg,謝謝,修正了錯誤 – Shep 2013-02-27 18:58:25

回答

2

補丁不完整。

Clang代碼錯誤是正確的:複製構造函數應該被刪除,因爲std::pair聲明瞭一個移動構造函數,但那是因爲clang正在實現最終的C++ 11規則,並且GCC 4.4頭文件被寫入與早期版本的C++ 0x草案,由GCC 4.4所支持的

你應該能夠加入這std::pair解決它:

pair(const pair&) = default; 
pair& operator=(const pair&) = default; 

,恢復了隱式定義的複製操作,所以鏘不會刪除它們。

+0

所以,如果我錯了,請糾正我,但這應該意味着每個使用Clang的'libstdC++ 4.4'的用戶都有同樣的問題。如果這些線路解決了問題,維護Clang的人可以很容易地修改補丁。 – Shep 2013-03-02 15:35:18

+1

是的,我希望每個使用該組合的人都會遇到同樣的問題。我認爲4.4頭文件中的shared_ptr也存在同樣的問題,也可能是其他類 – 2013-03-03 11:49:07

相關問題