2012-09-03 55 views
1
#include <memory> 

template<typename T> 
using CallbackPtr = const std::shared_ptr<const T>; 

template<typename C, typename T> 
using CallbackFunPtr = void (C::*)(CallbackPtr<T>); 

int main() { 
    return 0; 
} 

結果:G ++ - 4.7.0內部編譯器錯誤分割與遞歸類型別名故障

7 : internal compiler error: Segmentation fault 
Please submit a full bug report, with preprocessed source if appropriate. 
See <file:///usr/share/doc/gcc-4.7/README.Bugs> for instructions. 
Compilation failed 

我在做一些C++標準以外的這裏和G ++沒有錯誤消息尚未?或者這是一個真正的編譯器錯誤?

+1

**所有** ICE都是根據定義的編譯器錯誤。 – ildjarn

+0

只需按照說明進行操作。 – bmargulies

+0

我已經提交它作爲bug gcc bugzilla。這是我第一次見到ICE,所以只是想確定一下。現在知道將來要做什麼! –

回答

3

你的代碼很好,這是一個編譯器錯誤。您可能想要找到最小的測試用例並進行報告。在我的副本gcc-4.7.1上,這個

template<typename T> struct A{}; 
template<typename T> using B = const A<T>; 
B<int> x; 

足以給我一個ICE。罪魁禍首是這裏的const。您的示例在定義CallbackPtr時編譯爲

using CallbackPtr = std::shared_ptr<const T>; 
+0

我把它放在一起,並添加了一個錯誤。謝謝。這是我第一次提交一個G ++的bug,並且我看到了很多ICE。它代表什麼? –

+0

ICE =內部編譯器錯誤。 –

+0

謝謝:) - 我明白了我今天早上上班的週期,對我來說很愚蠢...... –