#include <iostream>
#include <functional> //Required for std::function.
//Not directly related to the problem.
//void myFunc(char seperator)
//{
// std::cout << "char overload" << std::endl;
//}
struct Callback
{
Callback(bool (&func)(char)): m_func(func)
{}
bool operator()(char c) { return m_func(c); }
bool (&m_func)(char);
};
void myFunc(Callback seperatorFunc)
{
std::cout << "Callback overload" << std::endl;
}
void myFunc(const std::string &separator)
{
std::cout << "std::string overload" << std::endl;
}
bool testCallback(char)
{
return true;
}
int main()
{
myFunc("String literal");
myFunc(std::string("std::string"));
//myFunc('c');
myFunc(testCallback);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4gLy9SZXF1aXJlZCBmb3Igc3RkOjpmdW5jdGlvbi4KIAovL05vdCBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBwcm9ibGVtLgovL3ZvaWQgbXlGdW5jKGNoYXIgc2VwZXJhdG9yKQovL3sKLy8gICAgc3RkOjpjb3V0IDw8ICJjaGFyIG92ZXJsb2FkIiA8PCBzdGQ6OmVuZGw7Ci8vfQogCnN0cnVjdCBDYWxsYmFjawp7CiAgICBDYWxsYmFjayhib29sICgmZnVuYykoY2hhcikpOiBtX2Z1bmMoZnVuYykKICAgIHt9CgogICAgYm9vbCBvcGVyYXRvcigpKGNoYXIgYykgeyByZXR1cm4gbV9mdW5jKGMpOyB9CgogICAgYm9vbCAoJm1fZnVuYykoY2hhcik7Cn07Cgp2b2lkIG15RnVuYyhDYWxsYmFjayBzZXBlcmF0b3JGdW5jKQp7CiAgICBzdGQ6OmNvdXQgPDwgIkNhbGxiYWNrIG92ZXJsb2FkIiA8PCBzdGQ6OmVuZGw7Cn0KIAp2b2lkIG15RnVuYyhjb25zdCBzdGQ6OnN0cmluZyAmc2VwYXJhdG9yKQp7CiAgICBzdGQ6OmNvdXQgPDwgInN0ZDo6c3RyaW5nIG92ZXJsb2FkIiA8PCBzdGQ6OmVuZGw7Cn0KIApib29sIHRlc3RDYWxsYmFjayhjaGFyKQp7CiAgICByZXR1cm4gdHJ1ZTsKfQogCmludCBtYWluKCkKewogICAgbXlGdW5jKCJTdHJpbmcgbGl0ZXJhbCIpOwogICAgbXlGdW5jKHN0ZDo6c3RyaW5nKCJzdGQ6OnN0cmluZyIpKTsKICAgIC8vbXlGdW5jKCdjJyk7CiAgICBteUZ1bmModGVzdENhbGxiYWNrKTsKICAgIAogICAgcmV0dXJuIDA7Cn0=