G ++ - 4.7.0内部编译器错误分段错误与递归类型别名

时间:2012-09-03 16:01:46

标签: c++ c++11 g++

#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;
}

结果:

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 个答案:

答案 0 :(得分:4)

您的代码很好,这是编译器错误。您可能希望找到最小的测试用例并进行报告。在我的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>;