内部编译器错误:gcc中的分段错误.将variadic模板发送到struct时

LxL*_*LxL 4 c++ gcc templates variadic-templates c++11

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

#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
Run Code Online (Sandbox Code Playgroud)

ideone

我正在使用gcc 4.8.1,我收到以下错误:

internal compiler error: Segmentation fault
 struct Container
        ^
Run Code Online (Sandbox Code Playgroud)

为什么gcc不编译呢?这段代码是否正确?

Csq*_*Csq 6

使用Clang进行编译会显示错误:

main.cpp:4:8: error: declaration of 'Container' shadows template parameter
struct Container
Run Code Online (Sandbox Code Playgroud)

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


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

  • 似乎VS2013接受`template <typename T> struct T {};` - 尽管它没有多大意义. (3认同)
  • 但真正的问题仍然是 GCC 中的一个错误。尽管如此,还是感谢您澄清问题。 (2认同)
  • @ user2799037是的,确实如此.但如果它是偶然的,OP可以继续前进并提交错误报告.(虽然后者似乎没必要,因为它适用于g ++ 4.9) (2认同)
  • 我试着在vs2013中编译它.编译好(没有任何警告) (2认同)