title: When can typeid return different type_info instances for same type?
body: <p><a href="http://erdani.com/" rel="noreferrer">Andrei Alexandrescu</a> writes in <a href="http://books.google.com/books?id=aJ1av7UFBPwC&amp;pg=PA38&amp;dq=typeid+type_info+lifetime#v=onepage&amp;q=typeid%20type_info%20lifetime&amp;f=false" rel="noreferrer">Modern C++ Design</a>:</p>
  
  <blockquote>
    <p>The objects returned by <code>typeid</code> have
    static storage, so you don't have to
    worry about lifetime issues.</p>
  </blockquote>
  
  <p>Andrei continues:</p>
  
  <blockquote>
    <p>The standard does not guarantee that
    each invocation of, say, <code>typeid(int)</code>
    returns a reference to the same
    <code>type_info</code> object.</p>
  </blockquote>
  
  <p>Even though the standard does not guarantee this, how is this implemented in common compilers, such as GCC and Visual Studio?</p>
  
  <p>Assuming <code>typeid</code> does not leak (and return a new instance every call), is it one "table" per application, per translation unit, per dll/so, or something completely different?</p>
  
  <p>Are there times when <code>&amp;typeid(T) != &amp;typeid(T)</code>?</p>
  
  <p>I'm mainly interested in compilers for Windows, but any information for Linux and other platforms is also appreciated.</p>