c++ - G++-4.7.0 递归类型别名的内部编译器错误分段故障

标签 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++ 还没有错误消息?或者这是一个真正的编译器错误?

最佳答案

你的代码没问题,这是一个编译器错误。您可能想要找到最小的测试用例并报告它。在我的 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>;

关于c++ - G++-4.7.0 递归类型别名的内部编译器错误分段故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12251067/

相关文章:

C++ 和序列化 : is there any way to do some kind of introspection?

c++ - 检查 string_view 不会超过它的字符串对象

c++ - 如何使用 auto 声明数组

c++ - 在 lambda C++14 中捕获 std::promise

C++ GNU 链接器错误

c++ - 为什么我写一个空的main没有警告?

c++ - 我可以用 C++ 为模板类编写接口(interface)吗

c++ - 为什么 MSVC 在覆盖具有正确签名的函数时会产生 C3668 错误?

c++ - 数据 C++ 的二进制表示显示的数据不正确

c++ - 为什么我们不能从派生类调用重载函数