I am trying to call function using pointer to member function pointer and parameter packs. Given Below is code:
class DemoClass { public: void Printer(const DemoClass& sc, const int& i) { } }; template<typename R, typename T, typename ... Args/*, typename ... Params*/> void MakeMemberActionDemoClass(R(T::*memberFunction)(Args...), Args&& ... args) { } int main() { DemoClass d; int z; MakeMemberActionDemoClass(&DemoClass::Printer, d, z); } I get following error:
error C2782: 'void MakeMemberActionDemoClass(R (__thiscall T::* )(Args...),Args &&...)' : template parameter 'Args' is ambiguous 1> could be 'const DemoClass&, const int&' 1> or 'DemoClass&, int&' If I remove && in last parameter of MakeMemberActionDemoClass, only difference in error is following:
1> could be 'const DemoClass&, const int&' 1> or 'DemoClass, int' What should I do so that parameter types will be deduced correctly?
Thanks in advance,
R(T::*memberFunction)(Args...), Params&& ... args, so that they are deduced separately