#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;
}
I2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8bGlzdD4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3N0cmVhbT4KCmNsYXNzIHN1bW1hdG9yewoKCXN0ZDo6bGlzdDxpbnQ+IHZhcnM7CgpwdWJsaWM6CglzdW1tYXRvciYgb3BlcmF0b3IgPDwgKGludCBvKQoJewoJCXZhcnMucHVzaF9iYWNrKG8pOwoJCXJldHVybiAqdGhpczsKCX0KCglzdW1tYXRvciYgb3BlcmF0b3IgPDwgKGNvbnN0IGNoYXIgKm8pCgl7CgkJdmFycy5wdXNoX2JhY2soYXRvaShvKSk7CgkJcmV0dXJuICp0aGlzOwoJfQoKCSAKCXN1bW1hdG9yJiBvcGVyYXRvciA8PCAoIHN1bW1hdG9yICYgKCpmKSggc3VtbWF0b3IgJiApICkKCXsKCQkoKmYpKCAqdGhpcyApOwoJCXJldHVybiAqdGhpczsKCX0KCglzdGF0aWMgc3VtbWF0b3ImIGNhbGMgKHN1bW1hdG9yJiBvKQoJewoJCWludCBzdW0gPSAwOwoJCXdoaWxlKCFvLnZhcnMuZW1wdHkoKSl7CgkJCXN1bSArPSBvLnZhcnMuZnJvbnQoKTsKCQkJby52YXJzLnBvcF9mcm9udCgpOwoJCX0KCQlzdGQ6OmNvdXQgPDwgInN1bSA9ICIgPDwgc3VtOwoJCXJldHVybiBvOwoJfQp9OwoKCgoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKewoJc3VtbWF0b3Igc3VtOwoJc3VtIDw8IDEgPDwgMiA8PCAiMyIgPDwgc3VtbWF0b3I6OmNhbGM7CglyZXR1cm4gMDsKfQ==