2012-09-15 35 views
1

我想我在libC++列表實現中發現了一個錯誤。從libC++使用std :: list的對象層次結構(bug?)

#include <list> 

using namespace std; 

class foo { 
    public: 
     list<foo> bar; 
}; 

的設置如下:

的XCode版本:在xcode中使用某些構建設置時下面的代碼將產生一個編譯器錯誤(字段有incomlete類型「富」) 4.4.1
C++語言方言: C++ 11或GNU ++ 11
C++標準庫: LLVM C++標準庫用C++擴展(的libC++ 11)

使用GCC libstdC++將解決該錯誤。
不使用C++ 11方言將解決錯誤。
使用vector而不是list將解決錯誤。

我認爲這是列表實現中的一個錯誤,但我不確定。
原諒我的無知,但我不知道我該怎麼做來解決這個問題。
切換到矢量不是我的項目中的一個選項,我絕對需要C++ 11功能。這還包括shared_ptr,但使用GCC時標題丟失。除此之外,蘋果似乎不再提供新版本的GCC。

如果有人可以重新創建這個問題,也許使用libC++的更新頭文件,我將非常感激。

另外,如果更新LLVM/libC++可以解決這個問題,你推薦它嗎?

回答

3

C++標準17.6.4.8:

在某些情況下(置換函數,處理函數,用於實例標準庫模板組件類型的操作),C++標準庫依賴於由C++程序提供的組件。如果這些組件不符合他們的要求,標準沒有要求實施。

特別地,該效果未定義在下列情況下:

  • ...
  • 如果一個不完整的類型(3.9)除非具體實例化一個模板組件, 當被用作模板參數允許該組件。

無標準庫的容器類模板,包括list,提到任何此類津貼不完全類型。所以你的程序是一個無效的程序,可能會碰到一些編譯器。這不能被認爲是標準庫實現中的一個錯誤。