I'm trying to use variadic template to refactor some of my code, but the compiler has "no matching function for call" error. Below is a simplified version (it may not make sense for functionality, but an example to reproduce the error):
// base case
void testFunc(int i) { std::cout << i << std::endl; }
template <class T, class... Args> void testFunc(int i) {
T t = 0;
std::cout << t << std::endl;
testFunc<Args...>(i);
}
int main() {
testFunc<int, long, float>(1);
return 0;
}
The error messages:
main.cpp:9:3: error: no matching function for call to 'testFunc'
testFunc<Args...>(i);
^~~~~~~~~~~~~~~~~
main.cpp:9:3: note: in instantiation of function template specialization 'testFunc<float>' requested here
main.cpp:9:3: note: in instantiation of function template specialization 'testFunc<long, float>' requested here
main.cpp:13:3: note: in instantiation of function template specialization 'testFunc<int, long, float>' requested here
testFunc<int, long, float>(1);
^
main.cpp:6:40: note: candidate template ignored: couldn't infer template argument 'T'
template <class T, class... Args> void testFunc(int i) {
^
1 error generated.
It looks like that the unwrapping of template parameters is working, and stops at the base case. But I have defined the base case. Why there is no matching function?
Aucun commentaire:
Enregistrer un commentaire