#include <iostream>

struct Adder
{
	operator int () const
	{ return result; }
	
	Adder add (int value) const
	{ return Adder{result + value}; }
	
	Adder operator ()(int value) const
	{ return add(value); }

	int result = 0;
};

Adder add (int value)
{
	return Adder{value};
}

int main()
{
    std::cout << add(1)(2)(3);

    return 0;
}
