title: Weird constexpr typeid errors
body: <p>Given the code</p>
  
  <pre><code>#include &lt;typeinfo&gt;
  #include &lt;type_traits&gt;
  
  struct A {};
  struct B {};
  
  static_assert(&amp;typeid(A), ""); // Fine
  static_assert(&amp;typeid(B), ""); // Fine
  static_assert(&amp;typeid(A) != nullptr, ""); // Fine
  static_assert(&amp;typeid(B) != nullptr, ""); // Fine
  
  constexpr auto const * tA = &amp;typeid(A);
  constexpr auto const * tB = &amp;typeid(B);
  using T = decltype(tA);
  using T2 = decltype(tB);
  static_assert(std::is_same&lt;T, T2&gt;::value, ""); // Fine, identical types!
  static_assert(tA == tA, ""); // Fine (comparing values of identical type)
  static_assert(tB == tB, ""); // Fine (comparing values of identical type)
  static_assert(tA != tB, ""); // Error: comparing values of identical type
                               //        suddenly not constexpr?
  </code></pre>
  
  <p>I get the following error with Clang:</p>
  
  <pre><code>$ clang++ -std=c++1z test.cpp -o test
  test.cpp:19:18: error: static_assert expression is not an integral constant expression
  static_assert(tA != tB, ""); // Error: comparing values of identical type not constexpr?
              ~~~^~~~~
  1 error generated.
  </code></pre>
  
  <p>And GCC:</p>
  
  <pre><code>$ g++-6.3.0 -std=c++1z test.cpp -o test
  test.cpp:19:1: error: non-constant condition for static assertion
  static_assert(tA != tB, ""); // Error: comparing values of identical type not constexpr?
  ^~~~~~~~~~~~~
  test.cpp:19:18: error: '(((const std::type_info*)(&amp; _ZTI1A)) != ((const std::type_info*)(&amp; _ZTI1B)))' is not a constant expression
  static_assert(tA != tB, ""); // Error: comparing values of identical type not constexpr?
              ~~~^~~~~
  </code></pre>
  
  <p>It doesn't matter if I use <code>void</code> instead of <code>auto</code> for <code>tA</code> and <code>tB</code>. Only GCC-s output changes slightly:</p>
  
  <pre><code>$ g++-6.3.0 -std=c++1z test.cpp -o test
  test.cpp:19:5: error: non-constant condition for static assertion
      static_assert(tA != tB, ""); // Error: comparing values of identical type not constexpr?
      ^~~~~~~~~~~~~
  test.cpp:19:22: error: '(((const void*)(&amp; _ZTI1A)) != ((const void*)(&amp; _ZTI1B)))' is not a constant expression
      static_assert(tA != tB, ""); // Error: comparing values of identical type not constexpr?
                  ~~~^~~~~
  </code></pre>
  
  <p>Can someone please explain why only the last <code>static_assert</code> fails to compile, whereas the others do compile AND pass?</p>