#include <iostream>
template<typename Fun>
void A(Fun const &f)
{
f(2);
}
template<typename Fun>
void B(Fun const &f)
{
f(3);
}
template<typename Fun>
void C(Fun const &f)
{
f(42);
}
int main(int, char**) noexcept
{
auto Func = [](auto const &v)
{
std::cout << v << '\n';
};
A(Func);
B(Func);
C(Func);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGU8dHlwZW5hbWUgRnVuPgp2b2lkIEEoRnVuIGNvbnN0ICZmKQp7CglmKDIpOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBGdW4+CnZvaWQgQihGdW4gY29uc3QgJmYpCnsKCWYoMyk7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIEZ1bj4Kdm9pZCBDKEZ1biBjb25zdCAmZikKewoJZig0Mik7Cn0KCmludCBtYWluKGludCwgY2hhcioqKSBub2V4Y2VwdAp7CglhdXRvIEZ1bmMgPSBbXShhdXRvIGNvbnN0ICZ2KQoJewoJCXN0ZDo6Y291dCA8PCB2IDw8ICdcbic7Cgl9OwoJCglBKEZ1bmMpOwoJQihGdW5jKTsKCUMoRnVuYyk7CiAgICAKCXJldHVybiAwOwp9