#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& calc_internal()
{
int sum = 0;
while(!vars.empty()){
sum += vars.front();
vars.pop_front();
}
std::cout << "sum = " << sum;
return *this;
}
summator& operator << ( summator & (f)( summator & ) ) {
return f( *this );
}
};
summator & calc( summator & o )
{
return o.calc_internal();
}
int main(int argc, char* argv[])
{
summator sum;
sum << 1 << 2 << "3" << calc;
return 0;
}
I2luY2x1ZGUgPGxpc3Q+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHNzdHJlYW0+CmNsYXNzIHN1bW1hdG9yewogICAgc3RkOjpsaXN0PGludD4gdmFyczsKcHVibGljOgogICAgc3VtbWF0b3ImIG9wZXJhdG9yIDw8IChpbnQgbykKICAgIHsKICAgICAgICB2YXJzLnB1c2hfYmFjayhvKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CiAgICBzdW1tYXRvciYgb3BlcmF0b3IgPDwgKGNvbnN0IGNoYXIgKm8pCiAgICB7CiAgICAgICAgdmFycy5wdXNoX2JhY2soYXRvaShvKSk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQogICAgc3VtbWF0b3ImIGNhbGNfaW50ZXJuYWwoKQogICAgewogICAgICAgIGludCBzdW0gPSAwOwogICAgICAgIHdoaWxlKCF2YXJzLmVtcHR5KCkpewogICAgICAgICAgICBzdW0gKz0gdmFycy5mcm9udCgpOwogICAgICAgICAgICB2YXJzLnBvcF9mcm9udCgpOwogICAgICAgIH0KICAgICAgICBzdGQ6OmNvdXQgPDwgInN1bSA9ICIgPDwgc3VtOwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KICAgIAogICAgc3VtbWF0b3ImIG9wZXJhdG9yIDw8ICggc3VtbWF0b3IgJiAoZikoIHN1bW1hdG9yICYgKSApIHsKICAgICAgICByZXR1cm4gZiggKnRoaXMgKTsKICAgIH0gICAgCn07CgpzdW1tYXRvciAmIGNhbGMoIHN1bW1hdG9yICYgbyApCnsKCXJldHVybiBvLmNhbGNfaW50ZXJuYWwoKTsKfQoKCmludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCnsKICAgIHN1bW1hdG9yIHN1bTsKICAgIHN1bSA8PCAxIDw8IDIgPDwgIjMiIDw8IGNhbGM7CiAgICByZXR1cm4gMDsKfQo=