我有一个可变参数模板函数f
。这编译得很好(使用g++ -std=c++11
并且可能使用c++0x
):
#include <tuple>
template<int ...>
struct seq { };
template <typename ...T, int ...S>
void f(std::tuple<T...> arg, seq<S...> s) {
// ... do stuff
}
int main() {
f<int>(std::tuple<int>(10), seq<0>());
return 0;
}
编译器会自动填写int ...S
有效的。
但是,我似乎无法手动提供整数参数:
int main() {
f<int, 0>(std::tuple<int>(10), seq<0>());
return 0;
}
输出:
/tmp/t.cpp:在函数“int main()”中:/tmp/t.cpp:12:42:错误:没有
匹配函数调用“f(std::tuple, seq<0>)”< br> /tmp/t.cpp:12:42: 注意:候选是:/tmp/t.cpp:7:6: 注意:
模板 void f(std::tuple<_TElements ...>,
seq) /tmp /t.cpp:7:6:注意:模板参数
扣除/替换失败:
我相信我已经阅读过,从技术上讲,应该只为模板函数提供一个可变参数模板参数包(在第一种情况下,它完全由上下文决定),所以这就解释了(?)。
对于调试,GCC 中有没有办法输出用于...S
tostderr
或的扩展stdout
?当它们一开始不编译时,它对于调试这样的东西非常有用。