#include <iostream>
#include <string>
class Foo {
public:
template <typename T>
void bar(std::string & str, const T& x) {
std::cout << str << ' ' << x << std::endl;
}
};
int main() {
typedef void (Foo::*Bar_t)(std::string &, const std::string&);
Bar_t stringedBar = &Foo::bar<std::string>;
std::string str = "Hello";
Foo f;
(f.*stringedBar)(str, "Baz");
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgoKY2xhc3MgRm9vIHsKcHVibGljOgoJdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cgl2b2lkIGJhcihzdGQ6OnN0cmluZyAmIHN0ciwgY29uc3QgVCYgeCkgewoJCXN0ZDo6Y291dCA8PCBzdHIgPDwgJyAnIDw8IHggPDwgc3RkOjplbmRsOwoJfQp9OwoKaW50IG1haW4oKSB7Cgl0eXBlZGVmIHZvaWQgKEZvbzo6KkJhcl90KShzdGQ6OnN0cmluZyAmLCBjb25zdCBzdGQ6OnN0cmluZyYpOwoJQmFyX3Qgc3RyaW5nZWRCYXIgPSAmRm9vOjpiYXI8c3RkOjpzdHJpbmc+OwoJCgkKCXN0ZDo6c3RyaW5nIHN0ciA9ICJIZWxsbyI7CgkKCUZvbyBmOwoJKGYuKnN0cmluZ2VkQmFyKShzdHIsICJCYXoiKTsKCQoJcmV0dXJuIDA7Cn0=