#include <iostream>
class Foo
{
int result;
public:
Foo() : result(0) {}
Foo(bool value) : result(value ? 1 : 0) {}
explicit Foo(int value) : result(value) {}
Foo operator+(bool value) const
{
std::cout << "adding " << value << std::endl;
return Foo((result << 1) | (value ? 1 : 0));
}
int get_result() const { return result; }
};
int main()
{
Foo x;
x = Foo(true) + false + true;
std::cout << x.get_result() << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgpjbGFzcyBGb28KewogICAgaW50IHJlc3VsdDsKICAgIApwdWJsaWM6CiAgICBGb28oKSA6IHJlc3VsdCgwKSB7fQogICAgRm9vKGJvb2wgdmFsdWUpIDogcmVzdWx0KHZhbHVlID8gMSA6IDApIHt9CiAgICBleHBsaWNpdCBGb28oaW50IHZhbHVlKSA6IHJlc3VsdCh2YWx1ZSkge30KICAgIEZvbyBvcGVyYXRvcisoYm9vbCB2YWx1ZSkgY29uc3QKICAgIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgImFkZGluZyAiIDw8IHZhbHVlIDw8IHN0ZDo6ZW5kbDsKICAgICAgICByZXR1cm4gRm9vKChyZXN1bHQgPDwgMSkgfCAodmFsdWUgPyAxIDogMCkpOwogICAgfQogICAgaW50IGdldF9yZXN1bHQoKSBjb25zdCB7IHJldHVybiByZXN1bHQ7IH0KfTsKCmludCBtYWluKCkKewogICAgRm9vIHg7CiAgICB4ID0gRm9vKHRydWUpICsgZmFsc2UgKyB0cnVlOwogICAgc3RkOjpjb3V0IDw8IHguZ2V0X3Jlc3VsdCgpIDw8IHN0ZDo6ZW5kbDsKfQ==