#include <iostream>
using std::cout;
using std::endl;

class my_bool {
  private:
    bool value;
  public:
    my_bool(bool value) : value(value) {}
    explicit operator bool() { return value; };

    friend my_bool operator==(const my_bool & instance_1, const my_bool & instance_2) {
    	return instance_1.value == instance_2.value;
    }
    friend my_bool operator&&(const my_bool & instance_1, const my_bool & instance_2) {
    	cout << "FOOOOOOOOO bar" << endl;
    	return instance_1.value && instance_2.value;
    }
    friend my_bool operator&&(const my_bool & lhs, bool rhs) {
    	return lhs && my_bool(rhs);
    }
    friend my_bool operator&&(bool lhs, const my_bool & rhs) {
    	return my_bool(lhs) && rhs;
    }

};

int main(int, char **){
  my_bool a = true;
  bool b = false;

  if(a == b){
    // do something
  }

  if(b && a){
    // do something 
  }
  return 0;
}