#include <memory>
struct A
{
void foo(const int& i) { }
};
template <typename F, class ...Args>
void a_caller(A& a, F &&f, Args&& ...args)
{
(a.*f)(std::forward<Args>(args)...);
}
int main()
{
int i = 42;
A a;
a_caller(a, &A::foo, i);
}
I2luY2x1ZGUgPG1lbW9yeT4KCnN0cnVjdCBBCnsKICAgIHZvaWQgZm9vKGNvbnN0IGludCYgaSkgeyB9Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgRiwgY2xhc3MgLi4uQXJncz4gCnZvaWQgYV9jYWxsZXIoQSYgYSwgRiAmJmYsIEFyZ3MmJiAuLi5hcmdzKQp7CiAgICAoYS4qZikoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKfQoKaW50IG1haW4oKQp7CiAgICBpbnQgaSA9IDQyOwogICAgQSBhOwoKICAgIGFfY2FsbGVyKGEsICZBOjpmb28sIGkpOwp9