【发布时间】:2012-06-04 14:16:43
【问题描述】:
下面的构造是什么意思?
#include <iostream>
template <int ...> struct s;
int main() {
int i = s<,>::xxx;
std::cout << i << std::endl;
}
由 gcc 4.4.5+ 编译,执行时输出0。
【问题讨论】:
-
它在我的机器上输出一些随机值。
i的初始化被忽略了,i的初始化值被打印出来。 -
看起来不合法。
s从未定义(并且不包含xxx成员)并且必须为模板提供非空参数。 (我用gcc 4.6.2编译,打印32767,clang不会编译)。 -
更改
s或xxx的名称不会改变行为。这几乎可以肯定是 gcc 中的一个错误。似乎该错误是通过向可变参数模板提供空参数来触发的。 -
报告为 gcc 错误,gcc.gnu.org/bugzilla/show_bug.cgi?id=53531
-
字符串的情况更有趣:{ string i = s::xxx; std::cout
标签: c++ templates gcc c++11 variadic