#include <iostream>
#include <functional>
template<class... Ts>
void callFunction(const std::function<void(Ts...)>& function, Ts... parameters)
{
function(parameters...);
}
void myFunc(const std::string& output)
{
std::cout << output << std::endl;
}
int main()
{
callFunction<const std::string&>(&myFunc, "Hello world");
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KCnRlbXBsYXRlPGNsYXNzLi4uIFRzPgp2b2lkIGNhbGxGdW5jdGlvbihjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQoVHMuLi4pPiYgZnVuY3Rpb24sIFRzLi4uIHBhcmFtZXRlcnMpCnsKCWZ1bmN0aW9uKHBhcmFtZXRlcnMuLi4pOwp9Cgp2b2lkIG15RnVuYyhjb25zdCBzdGQ6OnN0cmluZyYgb3V0cHV0KQp7CglzdGQ6OmNvdXQgPDwgb3V0cHV0IDw8IHN0ZDo6ZW5kbDsKfQoKaW50IG1haW4oKSAKewoJY2FsbEZ1bmN0aW9uPGNvbnN0IHN0ZDo6c3RyaW5nJj4oJm15RnVuYywgIkhlbGxvIHdvcmxkIik7CglyZXR1cm4gMDsKfQ==
prog.cpp: In function ‘int main()’:
prog.cpp:17:57: error: no matching function for call to ‘callFunction(void (*)(const string&), const char [12])’
callFunction<const std::string&>(&myFunc, "Hello world");
^
prog.cpp:5:6: note: candidate: template<class ... Ts> void callFunction(const std::function<void(Ts ...)>&, Ts ...)
void callFunction(const std::function<void(Ts...)>& function, Ts... parameters)
^~~~~~~~~~~~
prog.cpp:5:6: note: template argument deduction/substitution failed:
prog.cpp:17:57: note: mismatched types ‘const std::function<void(Ts ...)>’ and ‘void (*)(const string&) {aka void (*)(const std::__cxx11::basic_string<char>&)}’
callFunction<const std::string&>(&myFunc, "Hello world");
^