#include <iostream>
auto wrap(int (*f)(int)){
return [f](int i) {
return f(i);
};
}
int foo(int i);
extern decltype(wrap(&foo)) wrapped_foo;
#if 1
int foo(int i) { return i;}
decltype(wrap(foo)) wrapped_foo = wrap(&foo);
#endif
int func(){
return wrapped_foo(42);
}
int main() {
std::cout << func() << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKYXV0byB3cmFwKGludCAoKmYpKGludCkpewogICAgcmV0dXJuIFtmXShpbnQgaSkgewogICAgICAgIHJldHVybiBmKGkpOwogICAgfTsKfQoKaW50IGZvbyhpbnQgaSk7CmV4dGVybiBkZWNsdHlwZSh3cmFwKCZmb28pKSB3cmFwcGVkX2ZvbzsKCiNpZiAxCmludCBmb28oaW50IGkpIHsgcmV0dXJuIGk7fQpkZWNsdHlwZSh3cmFwKGZvbykpIHdyYXBwZWRfZm9vID0gd3JhcCgmZm9vKTsKI2VuZGlmCgppbnQgZnVuYygpewogICAgcmV0dXJuIHdyYXBwZWRfZm9vKDQyKTsKfQoKCmludCBtYWluKCkgewoJc3RkOjpjb3V0IDw8IGZ1bmMoKSA8PCBzdGQ6OmVuZGw7Cn0=