【问题标题】:internal compiler error: Segmentation fault in gcc . when sending variadic template to struct内部编译器错误:GCC中的分段错误。将Variadic模板发送到结构时
【发布时间】:2014-07-27 13:27:55
【问题描述】:

我正在尝试编译以下代码:

#include <iostream>

template<template <typename...> class Container,class... Args>
struct Container
{};

template<class T1,class T2>
struct Store
{};

int main()
{
    Container<Store,int,double> a;
}
//g++ -Wall -std=c++11 main.cpp

ideone

我使用的是 gcc 4.8.1,但出现以下错误:

internal compiler error: Segmentation fault
 struct Container
        ^

为什么 gcc 不编译呢?那个代码正确吗?

【问题讨论】:

    标签: c++ templates gcc c++11 variadic-templates


    【解决方案1】:

    用 Clang 编译会发现错误:

    main.cpp:4:8: error: declaration of 'Container' shadows template parameter
    struct Container
    

    如果重命名结构体或模板参数,代码也是用g++编译的,不知道它们的同名是偶然还是故意的。


    此外,g++ 4.8.2 和 4.9 工作正常,并给出与 Clang 类似的错误。

    【讨论】:

    • 但真正的问题仍然是 GCC 中的错误。不过,感谢您澄清问题。
    • @user2799037,真正的问题是 OP 代码中的错误,但它显然揭示了 gcc 中的错误,该错误会阻止正确的错误消息生成。
    • @user2799037 是的。但如果它是偶然的,OP 可以继续前进并提交错误报告。 (尽管后者似乎没有必要,因为它适用于 g++ 4.9)
    • 我尝试在 vs2013 中编译它。它编译得很好(没有任何警告)
    • 似乎 VS2013 接受了template &lt;typename T&gt; struct T { };——虽然它没有多大意义。
    猜你喜欢
    • 2014-05-16
    • 1970-01-01
    • 1970-01-01
    • 2015-10-26
    • 1970-01-01
    • 2021-11-13
    • 2018-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多