title: Why will "the adress of bool will always evaluate as true" here?
body: <p>I'm trying to understand how function pointers work. This is represents the setup:</p>
  
  <pre><code>bool f1(int x){
      if(condition){return true;}
      else return false;
  }
  
  bool f2(int x, bool (*func)(int)){
      if (func(x)){return true;}
      else return false;
  }
  
  void f3(int x, bool (*func)(int, bool)){
      if (func(x, f1)) {return "Whatever";}
      else return "Nevermind";
  
  int main(){
      f3(x, f2);
  }
  </code></pre>
  
  <p>This gives me:<br>
  In function 'void f3()':<br>
  "warning: the adress of bool 'f1(int)' will always evaluate as 'true' [-Waddress]<br>
  In function 'int main()':<br>
  error: invalid conversion from 'bool (<em>)(int,bool (</em>)(int))' to 'bool (*)(int, bool)'</p>
  
  <p>How much am I messing up?</p>