// Example program
#include <iostream>
#include <string>
#include <functional>
int functor1()
{
return -1;
}
int functor2(int a)
{
return a;
}
int functor3(int a, int b)
{
return a + b;
}
void doSomethingWithThisFunctor(const std::function<void()>& functor)
{
functor();
}
int main()
{
doSomethingWithThisFunctor(std::bind(functor1));
doSomethingWithThisFunctor(std::bind(functor2, 5));
auto lambda = [](int a, int b, int c) -> void {std::cout << "lambda expr = " << a + b << std::endl; };
std::function<void()> myFunctor = std::bind(lambda, 1, 1, 2);
myFunctor();
//doSomethingWithThisFunctor(std::bind(lambda, 5, 5));
}
Ly8gRXhhbXBsZSBwcm9ncmFtCiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CgoKaW50IGZ1bmN0b3IxKCkKewogICByZXR1cm4gLTE7Cn0KCmludCBmdW5jdG9yMihpbnQgYSkKewogICAgcmV0dXJuIGE7Cn0KCmludCBmdW5jdG9yMyhpbnQgYSwgaW50IGIpCnsKICAgIHJldHVybiBhICsgYjsKfQoKdm9pZCBkb1NvbWV0aGluZ1dpdGhUaGlzRnVuY3Rvcihjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0b3IpCnsKCWZ1bmN0b3IoKTsKfQoKaW50IG1haW4oKQp7CiAgICBkb1NvbWV0aGluZ1dpdGhUaGlzRnVuY3RvcihzdGQ6OmJpbmQoZnVuY3RvcjEpKTsKICAgIGRvU29tZXRoaW5nV2l0aFRoaXNGdW5jdG9yKHN0ZDo6YmluZChmdW5jdG9yMiwgNSkpOwogICAgCiAgICBhdXRvIGxhbWJkYSA9IFtdKGludCBhLCBpbnQgYiwgaW50IGMpIC0+IHZvaWQge3N0ZDo6Y291dCA8PCAibGFtYmRhIGV4cHIgPSAiIDw8IGEgKyBiIDw8IHN0ZDo6ZW5kbDsgfTsKICAgIAogICAgCiAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gbXlGdW5jdG9yID0gc3RkOjpiaW5kKGxhbWJkYSwgMSwgMSwgMik7CiAgICAKICAgIG15RnVuY3RvcigpOwogICAgCiAgICAvL2RvU29tZXRoaW5nV2l0aFRoaXNGdW5jdG9yKHN0ZDo6YmluZChsYW1iZGEsIDUsIDUpKTsKfQo=