#include <stdlib.h>
#include <list>
#include <iostream>
#include <sstream>

class summator{

	std::list<int> vars;

public:
	summator& operator << (int o)
	{
		vars.push_back(o);
		return *this;
	}

	summator& operator << (const char *o)
	{
		vars.push_back(atoi(o));
		return *this;
	}

	 
	summator& operator << ( summator & (*f)( summator & ) )
	{
		(*f)( *this );
		return *this;
	}

	static summator& calc (summator& o)
	{
		int sum = 0;
		while(!o.vars.empty()){
			sum += o.vars.front();
			o.vars.pop_front();
		}
		std::cout << "sum = " << sum;
		return o;
	}
};




int main(int argc, char* argv[])
{
	summator sum;
	sum << 1 << 2 << "3" << summator::calc;
	return 0;
}