#include <iostream>

struct Functor {
    Functor(int a, int b, int & c) :
        captured_a(a),
        captured_b(b),
        captured_c(c)
    {
    }

    int operator()(int arg1, int arg2)
    {
        captured_c = arg1 * arg2;
        return captured_a + captured_b + arg1 + arg2;
    }

private:
    int captured_a;
    int captured_b;
    int & captured_c;
};

int main()
{
    int a = 5,
        b = 10,
        c = 15;
    Functor f(a, b, c);

    std::cout << "f(3, 4) == " << f(7, 8) << std::endl;
    std::cout << "c == " << c << std::endl;

    return 0;
}
