#include <iostream>
struct foo
{
void bar(int i)
{
std::cout << __PRETTY_FUNCTION__ << ' ' << i << '\n';
}
};
void func(void(*p)(void *, int i), void *userdata)
{
(*p)(userdata, 42);
}
int main()
{
foo f;
func([](void *userdata, int i) {
static_cast<foo *>(userdata)->bar(i);
}, &f);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IGZvbwp7CiAgICB2b2lkIGJhcihpbnQgaSkgCiAgICB7CiAgICAgICAgc3RkOjpjb3V0IDw8IF9fUFJFVFRZX0ZVTkNUSU9OX18gPDwgJyAnIDw8IGkgPDwgJ1xuJzsKICAgIH0KfTsKCnZvaWQgZnVuYyh2b2lkKCpwKSh2b2lkICosIGludCBpKSwgdm9pZCAqdXNlcmRhdGEpCnsKICAgICgqcCkodXNlcmRhdGEsIDQyKTsKfQoKaW50IG1haW4oKQp7CiAgICBmb28gZjsKICAgIGZ1bmMoW10odm9pZCAqdXNlcmRhdGEsIGludCBpKSB7CiAgICAgICAgICAgIHN0YXRpY19jYXN0PGZvbyAqPih1c2VyZGF0YSktPmJhcihpKTsKICAgICAgICB9LCAmZik7Cn0K