I need your help to find out why does following code not compile.
#include <iostream>
template <int I>
void foo(){
std::cout << I << std::endl;
std::cout << "end of list" << std::endl;
}
template <int I, int ... Ints>
void foo(){
std::cout << I << std::endl;
foo<Ints...>();
}
int main(){
foo<1, 2>();
return 0;
}
I am getting this error.
function_parameter_pack.cpp: In instantiation of ‘void foo() [with int I = 1; int ...Ints = {2}]’:
function_parameter_pack.cpp:17:13: required from here
function_parameter_pack.cpp:12:15: error: call of overloaded ‘foo<2>()’ is ambiguous
foo<Ints...>();
~~~~~~~~~~~~^~
function_parameter_pack.cpp:4:6: note: candidate: void foo() [with int I = 2]
void foo(){
^~~
function_parameter_pack.cpp:10:6: note: candidate: void foo() [with int I = 2; int ...Ints = {}]
void foo(){
Isn't a more specialized function is supposed to be chosen? i.e one with only one template(the first one).
Aucun commentaire:
Enregistrer un commentaire