title: Use and implementation of the binary `is` operator with simple types in D. (DLang)
body: <p>In D, is there any difference between the binary <code>is</code> operator in the case</p>
  
  <pre class="lang-d prettyprint-override"><code>void * p;
  if ( p is null ) { }       // #1
  </code></pre>
  
  <p>using pointers, versus simply either</p>
  
  <pre class="lang-d prettyprint-override"><code>if  ( ! p ) { }            // #2a
  </code></pre>
  
  <p>or</p>
  
  <pre class="lang-d prettyprint-override"><code>if ( p == null ) { }       // #2b
  </code></pre>
  
  <p>without the is operator?  (DLang)</p>
  
  <p>(I'm restricting this to simple scalar types, no aggregates or complex types. I am aware that with classes <code>is</code> simply compares their addresses, iirc.)</p>