title: Function's returned value type is either an alias ***or*** boolean
body: <p>How would we obtain a function's returned value type is either an alias <strong><em>or</em></strong> boolean once in a call (expected if possible wihout overload) ?<br>
  let's realize that function's illustration only:</p>
  
  <pre><code>struct U {
      int v;
  }
  
  int&amp; f( U&amp; u, int t ) {
        if (u.v == t) return u.v ;  // ... 
        else return (bool)0 ;      // ???
  }
  
  int main(){
    U u{7};
    int b,c, t=9;
  
    if (c=f(u, t)) b=c;
  }
  </code></pre>
  
  <p>Thank</p>