【问题标题】:Is ther a good workaround for GCC's "sorry, unimplemented: cannot expand ‘NEXT ...’ into a fixed-length argument list" error? [duplicate]对于 GCC 的“抱歉,未实现:无法将‘NEXT ...’扩展为固定长度的参数列表”错误,是否有一个好的解决方法? [复制]
【发布时间】:2012-03-22 20:38:37
【问题描述】:

可能重复:
GCC error with variadic templates: “Sorry, unimplemented: cannot expand 'Identifier…' into a fixed-length argument list”

我有这段代码,它会产生标题中显示的错误消息:

#include <iostream>

template <int FIRST, int... NEXT>
struct Test {
    static const int VALUE = FIRST + Test<NEXT...>::VALUE;
};

template <int FIRST>
struct Test<FIRST> {
    static const int VALUE = FIRST;
};

int main() {
    std::cout << Test<1, 2, 3>::VALUE << std::endl; // print "6"
    return 0;
}

是否有任何简单的解决方法可以让它在 GCC 中编译而不改变它的功能?

【问题讨论】:

  • 我看到了那个答案,但我不太明白(所有这些不同的类有什么用,它们与原始问题有什么关系,以及为什么当代码在原来的问题没有?)。
  • 它是重复的原因是因为您收到错误的原因与另一个问题相同:您的 GCC 版本没有实现对 varadic 模板的这种使用。您必须更新它或不使用可变参数模板。
  • @Nicol:您仍然可以很好地使用可变参数模板,您只需要解决它并使用部分专业化。

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


【解决方案1】:

更新 GCC。

【讨论】:

  • +1'd。在旧版本的 GCC 中玩弄图灵完备性是……愚蠢的,尤其是因为它使用了 '0x 功能
  • 我正在使用 Arch Linux 存储库 (4.6.3) 中的 GCC 版本。如果我不解决这个问题,我是否应该担心其他人无法编译我的程序?
猜你喜欢
  • 2010-12-31
  • 2014-03-07
  • 2017-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-10
  • 1970-01-01
  • 2014-08-18
相关资源
最近更新 更多