#include <iostream>
template<typename R, typename... Args>
void foo( R (*bar)(Args...))
{
}
template<typename F>
void foo( F f)
{
foo(+f);
}
int main()
{
foo([](int x, float y)
{
std::cout << x << " " << y << std::endl;
}
);
return 0;
}
ICAgICNpbmNsdWRlIDxpb3N0cmVhbT4KICAgICAKICAgIHRlbXBsYXRlPHR5cGVuYW1lIFIsIHR5cGVuYW1lLi4uIEFyZ3M+CiAgICB2b2lkIGZvbyggUiAoKmJhcikoQXJncy4uLikpCiAgICB7CiAgICB9CiAgICAgCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGPgogICAgdm9pZCBmb28oIEYgZikKICAgIHsKICAgIAlmb28oK2YpOwogICAgfQogICAgCiAgICBpbnQgbWFpbigpCiAgICB7CiAgICAJZm9vKFtdKGludCB4LCBmbG9hdCB5KQogICAgCSAgICAgewogICAgCQkgICBzdGQ6OmNvdXQgPDwgeCA8PCAiICIgPDwgeSA8PCBzdGQ6OmVuZGw7CiAgICAJCSB9CiAgICAJICAgKTsKICAgIAlyZXR1cm4gMDsKICAgIH0=