#include <iostream>
using namespace std;
struct foo{
bool operator==(bool val) const {
cout << "foo::operator== ";
return false;
}
bool operator!()const{
cout << "foo::operator!";
return reinterpret_cast<intptr_t>(this)/sizeof(this) / 2 == 0;
}
};
bool operator==(bool lhs,const foo &rhs){
cout << "global operator==";
return true;
}
foo Function(){
return foo();
}
int main() {
if(false == Function()){
cout << "true" <<endl;
}else{
cout <<"false" << endl;
}
if(Function() == false){
cout << "true" <<endl;
}else{
cout <<"false" << endl;
}
if(!Function()){
cout << "true" <<endl;
}else{
cout <<"false" << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IGZvb3sKCWJvb2wgb3BlcmF0b3I9PShib29sIHZhbCkgY29uc3QgewoJCWNvdXQgPDwgImZvbzo6b3BlcmF0b3I9PSAiOwoJCXJldHVybiBmYWxzZTsKCX0KCWJvb2wgb3BlcmF0b3IhKCljb25zdHsKCQljb3V0IDw8ICJmb286Om9wZXJhdG9yISI7CgkJcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRoaXMpL3NpemVvZih0aGlzKSAvIDIgPT0gMDsKCX0KfTsKCmJvb2wgb3BlcmF0b3I9PShib29sIGxocyxjb25zdCBmb28gJnJocyl7Cgljb3V0IDw8ICJnbG9iYWwgb3BlcmF0b3I9PSI7CglyZXR1cm4gdHJ1ZTsKfQoKZm9vIEZ1bmN0aW9uKCl7CglyZXR1cm4gZm9vKCk7Cn0KCmludCBtYWluKCkgewoJaWYoZmFsc2UgPT0gRnVuY3Rpb24oKSl7CgkJY291dCA8PCAidHJ1ZSIgPDxlbmRsOwoJfWVsc2V7CgkJY291dCA8PCJmYWxzZSIgPDwgZW5kbDsKCX0KCWlmKEZ1bmN0aW9uKCkgPT0gZmFsc2UpewoJCWNvdXQgPDwgInRydWUiIDw8ZW5kbDsKCX1lbHNlewoJCWNvdXQgPDwiZmFsc2UiIDw8IGVuZGw7Cgl9CglpZighRnVuY3Rpb24oKSl7CgkJY291dCA8PCAidHJ1ZSIgPDxlbmRsOwoJfWVsc2V7CgkJY291dCA8PCJmYWxzZSIgPDwgZW5kbDsKCX0KCXJldHVybiAwOwp9