title: Why is my YES BOOL turned into a true bool by negator?
body: <p>I have the following code:</p>
  
  <pre class="lang-objective-c prettyprint-override"><code>    // ...
  
      [self performSelectorInBackground:@selector(mySel:) withObject:@YES];
  }
  
  // ...
  
  - (void) mySel:(BOOL)suppressUserAlerts
  {
      NSError*error;
      [obj doActionWithError:&amp;error];
      if (!suppressUserAlerts &amp;&amp; error) // line with breakpoint
      {
          [self alertOfError:error];
      }
  
      // ...
  </code></pre>
  
  <p>Now, even though I passed in <code>@YES</code>, <code>alertOfError:</code> is always called. So, naturally, I debugged it and added some watched expressions and breakpoints, and I found this nonsense:</p>
  
  <p><a href="https://i.stack.imgur.com/z0qzr.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/z0qzr.png" alt="A screenshot of two expressions: &lt;code&gt;!suppressUserAlerts = (bool) true&lt;/code&gt; and &lt;code&gt;suppressUserAlerts = (BOOL) YES&lt;/code&gt;"></a></p>
  
  <p>So, baffled, I ask: <strong>why is <code>suppressUserAlerts</code> <code>YES</code>, and <code>!suppressUserAlerts</code> <code>true</code>?</strong> And, more importantly, <strong>How do I get the value I want?</strong></p>