title: Is an empty class usable as a constexpr variable without an initializer or explicit default constructor?
body: <p>Given the following code:</p>
  
  <pre><code>struct f {
  };
  
  int main(){
      constexpr f f1 ;
      //const f f1  ; // This also has the same issue
      //constexpr f f1 = {} ; //This works
  }
  </code></pre>
  
  <p>clang and gcc disagree over whether it is valid, with clang providing the following diagnostic (<em><a href="http://melpon.org/wandbox/permlink/phRBq2DeenTbBpYJ" rel="nofollow noreferrer">see it live</a></em>):</p>
  
  <pre><code>error: default initialization of an object of const type 'const f' without a user-provided default constructor
  constexpr f f1 ;
              ^
                {}
  </code></pre>
  
  <p>As far as I can tell <code>f</code> is a literal type and it is initialized by the implicitly defaulted constructor which should allow it to be declared constexpr. Who is correct here?</p>
  
  <p>Note, clang does accept the  declaration of <code>f1</code> if I explicitly add a constexpr default constructor:</p>
  
  <pre><code>constexpr f() {} ;
  </code></pre>
  
  <p>Does the answer change is <code>f</code> is not an aggregate?</p>