I have an overloaded function which I want to pass along wrapped in a std::function. GCC4.6 does not find a "matching function". While I did find some questions here the answers are not as clear as I would like them. Could someone tell me why the following code can not deduct the correct overload and how to (elegantly) work around it?
int test(const std::string&) {
return 0;
}
int test(const std::string*) {
return 0;
}
int main() {
std::function<int(const std::string&)> func = test;
return func();
}
That is ambiguous situation.
To disambiguate it, use explicit cast as:
Now the compiler would be able to disambiguate the situation, based on the type in the cast.
Or, you can do this:
So why
std::function<int(const std::string&)>
does not work the wayfuntype fun = test
works above?Well the answer is, because
std::function
can be initialized with any object, as its constructor is templatized which is independent of the template argument you passed tostd::function
.