#include <iostream>
bool foo()
{
std::cout << " called foo()" << std::endl;
return false;
}
int main()
{
bool b;
std::cout << "b = foo() && foo()" << std::endl;
b = foo() && foo();
// foo() not called -- b is false, so no need to continue
std::cout << "b = b && foo()" << std::endl;
b = b && foo();
// foo() still called because &= is eager
std::cout << "b &= foo()" << std::endl;
b &= foo();
// equivalent is the eager form of &
std::cout << "b = b & foo()" << std::endl;
b = b & foo();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKYm9vbCBmb28oKQp7CglzdGQ6OmNvdXQgPDwgIiAgY2FsbGVkIGZvbygpIiA8PCBzdGQ6OmVuZGw7CglyZXR1cm4gZmFsc2U7Cn0KCmludCBtYWluKCkKewoJYm9vbCBiOwoJc3RkOjpjb3V0IDw8ICJiID0gZm9vKCkgJiYgZm9vKCkiIDw8IHN0ZDo6ZW5kbDsKCWIgPSBmb28oKSAmJiBmb28oKTsKCQoJLy8gZm9vKCkgbm90IGNhbGxlZCAtLSBiIGlzIGZhbHNlLCBzbyBubyBuZWVkIHRvIGNvbnRpbnVlCglzdGQ6OmNvdXQgPDwgImIgPSBiICYmIGZvbygpIiA8PCBzdGQ6OmVuZGw7CgliID0gYiAmJiBmb28oKTsKCQoJLy8gZm9vKCkgc3RpbGwgY2FsbGVkIGJlY2F1c2UgJj0gaXMgZWFnZXIKCXN0ZDo6Y291dCA8PCAiYiAmPSBmb28oKSIgPDwgc3RkOjplbmRsOwoJYiAmPSBmb28oKTsKCQoJLy8gZXF1aXZhbGVudCBpcyB0aGUgZWFnZXIgZm9ybSBvZiAmCglzdGQ6OmNvdXQgPDwgImIgPSBiICYgZm9vKCkiIDw8IHN0ZDo6ZW5kbDsKCWIgPSBiICYgZm9vKCk7Cn0=