#include <functional>
#include <iostream>
void foo(double arg){
std::cout << "foo, argument = " << arg << "\n";
}
struct foo_functor{
void operator()(float arg) const{
std::cout << "foo_functor, argument = " << arg << "\n";
}
};
int main(){
std::function<void(int)> f1(foo), f2((foo_functor()));
f1(5);
f2(6);
f1(4.7);
}
I2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDxpb3N0cmVhbT4KCnZvaWQgZm9vKGRvdWJsZSBhcmcpewoJc3RkOjpjb3V0IDw8ICJmb28sIGFyZ3VtZW50ID0gIiA8PCBhcmcgPDwgIlxuIjsKfQoKc3RydWN0IGZvb19mdW5jdG9yewogIHZvaWQgb3BlcmF0b3IoKShmbG9hdCBhcmcpIGNvbnN0ewogIAlzdGQ6OmNvdXQgPDwgImZvb19mdW5jdG9yLCBhcmd1bWVudCA9ICIgPDwgYXJnIDw8ICJcbiI7CiAgfQp9OwoKaW50IG1haW4oKXsKICBzdGQ6OmZ1bmN0aW9uPHZvaWQoaW50KT4gZjEoZm9vKSwgZjIoKGZvb19mdW5jdG9yKCkpKTsKICBmMSg1KTsKICBmMig2KTsKICBmMSg0LjcpOwp9Cg==