使用可变参数模板时出现 G++ 错误

G++ error while playing with variadic templates

本文关键字:G++ 错误 变参 参数      更新时间:2023-10-16
//class we're trying to generate
template <int a, foo b>
class A
{
public:
  A()
  {
    std::cout << a << "," << (int)b << std::endl;
  }
};
//class which generates information
template <typename T>
struct B
{
  typedef T value_type;
  static const T val;
};
template <typename... B>
struct madscience_intitializer
{
  template <typename B::value_type... args>
  using ret_type = A<args...>;
};
int main()
{
  madscience_intitializer<B<int>,B<foo> >::ret_type<1,foo::y> a;
}

在 G++ 中,我得到

/home/njclimer/source/testdir/main/main2.cpp: In function 'int main()':
/home/njclimer/source/testdir/main/main2.cpp:38:61: internal compiler error: in dependent_type_p, at cp/pt.c:19526
madscience_intitializer<B<int>,B<foo> >::ret_type<1,foo::y> a;

Please submit a full bug report,
with preprocessed source if appropriate.
See <http://bugzilla.redhat.com/bugzilla> for instructions.
Preprocessed source stored into /tmp/ccAhk6TK.out file, please attach this to your bugreport.

还有其他人遇到过这种情况吗?这是编译器的实际错误还是我的代码中的错误?

我在跑步

g++ (GCC) 4.8.2 20131212 (Red Hat 4.8.2-7)
                                                         ^

带标志 -std=gnu++0x -O2 -g

显然编译器不应该崩溃,但我认为你的代码无论如何都不会编译。

不能将非整型类型作为模板参数传递,如下所示:

模板使用 ret_type = A;

应该是

使用 ret_type = A;