title: Safely checking the type of a variable
body: <p>For a system I need to convert a pointer to a long then the long back to the pointer type. As you can guess this is very unsafe. What I wanted to do is use dynamic_cast to do the conversion so if I mixed them I'll get a null pointer. This page says <a href="http://publib.boulder.ibm.com/infocenter/lnxpcomp/v7v91/index.jsp?topic=/com.ibm.vacpp7l.doc/language/ref/clrc05keyword_dynamic_cast.htm" rel="nofollow noreferrer">http://publib.boulder.ibm.com/infocenter/lnxpcomp/v7v91/index.jsp?topic=/com.ibm.vacpp7l.doc/language/ref/clrc05keyword_dynamic_cast.htm</a></p>
  
  <blockquote>
    <p>The dynamic_cast operator performs
    type conversions at run time. The
    dynamic_cast operator guarantees the
    conversion of a pointer to a base
    class to a pointer to a derived class,
    or the conversion of an lvalue
    referring to a base class to a
    reference to a derived class. A
    program can thereby use a class
    hierarchy safely. This operator and
    the typeid operator provide run-time
    type information (RTTI) support in
    C++.</p>
  </blockquote>
  
  <p>and I'd like to get an error if it's null so I wrote my own dynamic cast</p>
  
  <pre><code>template&lt;class T, class T2&gt; T mydynamic_cast(T2 p)
  {
      assert(dynamic_cast&lt;T&gt;(p));
      return reinterpret_cast&lt;T&gt;(p);
  }
  </code></pre>
  
  <p>With MSVC I get the error "error C2681: 'long' : invalid expression type for dynamic_cast". It turns out this will only work with classes which have virtual functions... WTF! I know the point of a dynamic cast was for the up/down casting inheritance problem but I also thought it was to solve the type cast problem dynamically. I know I could use reinterpret_cast but that doesn't guarantee the same type of safety.</p>
  
  <p>What should I use to check if my typecast are the same type? I could compare the two typeid but I would have a problem when I want to typecast a derived to its base. So how can I solve this?</p>