title: bad_cast is not thrown always from dynamic_cast
body: <p>I'm facing some issues while using exception handling for <code>dynamic_cast</code>. It is not returning <code>bad_cast</code> always.</p>
  
  <p>the statement below is <strong>not throwing me bad_cast</strong>, though <code>d1</code> is returned <code>nullptr</code> and compiler is showing me warning</p>
  
  <pre><code>derived *d1 = dynamic_cast &lt;derived *&gt; (&amp;base);
  </code></pre>
  
  <p>but if i try with following statement:</p>
  
  <pre><code>derived d1 = dynamic_cast &lt;derived &amp;&gt; (base);
  </code></pre>
  
  <p>then <strong>it will throw std::bad_cast</strong></p>
  
  <p>Am I missing something in the logic? classes are polymorphic.</p>