#include <iostream>
#include <string>
struct counter {
size_t ints, doubles, strings, others;
counter(): ints(0), doubles(0), strings(0), others(0) {}
counter & operator , (int) { ++ints; return *this; }
counter & operator , (double) { ++doubles; return *this; }
counter & operator , (char const *) { ++strings; return *this; }
counter & operator , (std::string const &) { ++strings; return *this; }
template <class T>
counter & operator , (T const &) { ++others; return *this; }
template <class T>
counter & operator += (T const & v) { return this->operator , (v); }
friend std::ostream & operator << (std::ostream & o, counter const & c)
{
return o << "counter{ ints:" << c.ints << ", doubles:" << c.doubles << ", strings:" << c.strings
<< ", others:" << c.others << " }";
}
};
int main()
{
counter c;
c += 10, 10., 200, "hello!", true, 5, 'x';
std::cout << c << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgoKc3RydWN0IGNvdW50ZXIgewogICAgc2l6ZV90IGludHMsIGRvdWJsZXMsIHN0cmluZ3MsIG90aGVyczsgIAogICAgCiAgICBjb3VudGVyKCk6IGludHMoMCksIGRvdWJsZXMoMCksIHN0cmluZ3MoMCksIG90aGVycygwKSB7fQogICAgCiAgICBjb3VudGVyICYgb3BlcmF0b3IgLCAoaW50KSB7ICsraW50czsgcmV0dXJuICp0aGlzOyB9CiAgICBjb3VudGVyICYgb3BlcmF0b3IgLCAoZG91YmxlKSB7ICsrZG91YmxlczsgcmV0dXJuICp0aGlzOyB9CiAgICAKICAgIGNvdW50ZXIgJiBvcGVyYXRvciAsIChjaGFyIGNvbnN0ICopIHsgKytzdHJpbmdzOyByZXR1cm4gKnRoaXM7IH0KICAgIGNvdW50ZXIgJiBvcGVyYXRvciAsIChzdGQ6OnN0cmluZyBjb25zdCAmKSB7ICsrc3RyaW5nczsgcmV0dXJuICp0aGlzOyB9CiAgICAKICAgIHRlbXBsYXRlIDxjbGFzcyBUPgogICAgY291bnRlciAmIG9wZXJhdG9yICwgKFQgY29uc3QgJikgeyArK290aGVyczsgcmV0dXJuICp0aGlzOyB9CiAgICAKICAgIHRlbXBsYXRlIDxjbGFzcyBUPgogICAgY291bnRlciAmIG9wZXJhdG9yICs9IChUIGNvbnN0ICYgdikgeyByZXR1cm4gdGhpcy0+b3BlcmF0b3IgLCAodik7IH0KICAgIAogICAgZnJpZW5kIHN0ZDo6b3N0cmVhbSAmIG9wZXJhdG9yIDw8IChzdGQ6Om9zdHJlYW0gJiBvLCBjb3VudGVyIGNvbnN0ICYgYykKICAgIHsKICAgICAgICByZXR1cm4gbyA8PCAiY291bnRlcnsgaW50czoiIDw8IGMuaW50cyA8PCAiLCBkb3VibGVzOiIgPDwgYy5kb3VibGVzIDw8ICIsIHN0cmluZ3M6IiA8PCBjLnN0cmluZ3MgCiAgICAgICAgICAgIDw8ICIsIG90aGVyczoiIDw8IGMub3RoZXJzIDw8ICIgfSI7CiAgICB9Cn07CgppbnQgbWFpbigpCnsKICAgIGNvdW50ZXIgYzsKICAgIGMgKz0gMTAsIDEwLiwgMjAwLCAiaGVsbG8hIiwgdHJ1ZSwgNSwgJ3gnOwogICAgc3RkOjpjb3V0IDw8IGMgPDwgc3RkOjplbmRsOwogICAgCiAgICByZXR1cm4gMDsKfQ==