title: unexpected invalid application of 'sizeof' to incomplete type error
body: <p>In the following code</p>
  <pre><code>#include &lt;type_traits&gt;
  
  template&lt; typename T &gt;
  struct Allocator {
      using element_type = std::aligned_storage_t&lt; sizeof( T ) &gt;;
  };
  
  template&lt; typename T &gt;
  struct MPT {
      static Allocator&lt; MPT &gt; allocator;
  };
  
  using RV = MPT&lt; double &gt;;
  
  template&lt;&gt;
  Allocator&lt; RV &gt; RV::allocator = {};
  </code></pre>
  <p>g++ yields the following error: invalid application of 'sizeof' to incomplete type 'MPT'.</p>
  <p>I tried using g++ 10.2 using Compiler Explorer (<a href="https://godbolt.org/z/ran4or" rel="noreferrer">https://godbolt.org/z/ran4or</a>). Clang and MSVC do not complain (see <a href="https://godbolt.org/z/nsE5Yj" rel="noreferrer">https://godbolt.org/z/nsE5Yj</a> and <a href="https://godbolt.org/z/7c7n4e" rel="noreferrer">https://godbolt.org/z/7c7n4e</a>).</p>
  <p>Is this really an example of an incomplete type? Which compiler is correct here?</p>