I'm trying to explicitly instantiate a variadic constructor. This minimal example to print all arguments causes the same error I'm seeing on MinGW-w64 on 64 bit Win 7 with GCC 5.3.
struct stf {
template<typename... Args> stf(Args&&... args){
using expand_type = int[];
expand_type{(print(args), 0)... };
}
};
//error on next line:
//template-id 'stf<char*, char*>' for 'stf::stf(char*, char*)'
//does not match any template declaration
template stf::stf<char*,char*>(char*,char*);
Let's ignore the parameter pack, for one moment:
Pop quiz: which instantiation matches the above template. Is it:
or
?
If you substitute
char *
everywhere the template type appears in the template, you'll obviously end up with the second version as the right answer.Therefore, the correct template instantiation must be: