title: Is this a bug? Constexpr constructor silently becomes non-constexpr
body: <p>Look at this code:</p>
  
  <pre><code>struct NonConstexpr {
      NonConstexpr() { }
  };
  
  template &lt;typename T&gt;
  struct Bar {
      NonConstexpr nonConstexpr;
  
      constexpr Bar() { }
  };
  
  struct Foo {
      Bar&lt;void&gt; bar;
  
      constexpr Foo() { }
  };
  </code></pre>
  
  <p><code>Foo</code> has a member, <code>Foo::bar::nonConstexpr</code>, which has a non-constexpr constructor. So, my expectation is that this should not compile. But it compiles with gcc, clang and msvc. Is this a compiler bug, or some rule allows this code to compile?</p>
  
  <p>If I add a <code>NonConstexpr</code> member into <code>Foo</code> directly, the code doesn't compile anymore.</p>
  
  <p>(I got this problem, because I've expected static initialization for a global <code>Foo</code> object, but it got dynamically initialized, and it caused a problem, because of "static initialization order fiasco")</p>