error notification in the form of a returned value of 0 is inconvenient to
      test, or worse yet, easy to forget to test. The throwing form of <code class="computeroutput">dynamic_cast</code>,
      which works on references, can be used on pointers through the ugly expression
      <code class="computeroutput">&amp;dynamic_cast&lt;T&amp;&gt;(*p)</code>, which causes undefined behavior
      if <code class="computeroutput">p</code> is <code class="computeroutput">0</code>. The <code class="computeroutput