#include <iostream>
#include <functional>
void print(int x) {
std::cout << x << std::endl;
}
int main() {
int hour_now = 5;
auto get_hour_now = [&]() { return hour_now; };
auto f1 = [&get_hour_now]() { print(get_hour_now() + 10); }; // Correct
auto f2 = std::bind(print, get_hour_now() + 10); // Wrong
auto f3 = std::bind(print, std::bind(std::plus<int>(), get_hour_now(), 10)); // Wrong
auto f4 = std::bind(print, std::bind(std::plus<int>(), std::bind(get_hour_now), 10)); // Correct
f1();
f2();
f3();
f4();
hour_now = 1000;
f1(); // 1010
f2(); // 15
f3(); // 15
f4(); // 1010
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KCnZvaWQgcHJpbnQoaW50IHgpIHsKICAgIHN0ZDo6Y291dCA8PCB4IDw8IHN0ZDo6ZW5kbDsKfQoKaW50IG1haW4oKSB7CiAgICBpbnQgaG91cl9ub3cgPSA1OwogICAgYXV0byBnZXRfaG91cl9ub3cgPSBbJl0oKSB7IHJldHVybiBob3VyX25vdzsgfTsKCiAgICBhdXRvIGYxID0gWyZnZXRfaG91cl9ub3ddKCkgeyBwcmludChnZXRfaG91cl9ub3coKSArIDEwKTsgfTsgLy8gQ29ycmVjdAogICAgYXV0byBmMiA9IHN0ZDo6YmluZChwcmludCwgZ2V0X2hvdXJfbm93KCkgKyAxMCk7IC8vIFdyb25nCiAgICBhdXRvIGYzID0gc3RkOjpiaW5kKHByaW50LCBzdGQ6OmJpbmQoc3RkOjpwbHVzPGludD4oKSwgZ2V0X2hvdXJfbm93KCksIDEwKSk7IC8vIFdyb25nCiAgICBhdXRvIGY0ID0gc3RkOjpiaW5kKHByaW50LCBzdGQ6OmJpbmQoc3RkOjpwbHVzPGludD4oKSwgc3RkOjpiaW5kKGdldF9ob3VyX25vdyksIDEwKSk7IC8vIENvcnJlY3QKCiAgICBmMSgpOwogICAgZjIoKTsKICAgIGYzKCk7CiAgICBmNCgpOwoKICAgIGhvdXJfbm93ID0gMTAwMDsKCiAgICBmMSgpOyAvLyAxMDEwCiAgICBmMigpOyAvLyAxNQogICAgZjMoKTsgLy8gMTUKICAgIGY0KCk7IC8vIDEwMTAKCiAgICByZXR1cm4gMDsKfQo=