struct A
{
	int glob;

	A () : glob(0) {}

	int operator ()(int i1)
	{
		return glob += i1;
	}

	int operator ()(int i1, int i2)
	{
		operator()(i1);
		return i1+i2;
	}

	A* operator ()(int i1, int i2, int i3)
	{
		glob += i1+i2+i3;
		return this;
	}
};

int main()
{
	A a;

	a(4);
	a(2,3);
	a(3,2,3)->operator()(1);
	a(2);
}

