我有一个可变模板函数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: In function ‘int main()’: /tmp/t.cpp:12:42: error: no
matching function for call to ‘f(std::tuple, seq<0>)’
/tmp/t.cpp:12:42: note: candidate is: /tmp/t.cpp:7:6: note:
template void f(std::tuple<_TElements ...>,
seq) /tmp/t.cpp:7:6: note: template argument
deduction/substitution failed:
我相信我读过,技术上也应该只有一个可变参数提供给模板函数的模板参数包(在第一种情况下,它完全由上下文确定),以便解释它(?)。
对于调试,有没有办法在GCC输出用于...S
到stderr
或stdout
的扩展?当它们一开始不编译时,调试这样的东西会非常有用。
什么编译器的版本?它对代码说什么? –
gcc 4.7。它说它无法确定模板类型。 – user
请复制并粘贴_actual_错误。 – ildjarn