title: Why can't non-static data members be constexpr?
body: <p>This is valid code:</p>
  
  <pre><code>struct S {
    constexpr S(int x, int y): xVal(x), yVal(y) {}
    constexpr S(int x): xVal(x) {}
    constexpr S() {}
  
    const int xVal { 0 };
    const int yVal { 0 };
  };
  </code></pre>
  
  <p>But here I'd really like to declare <code>xVal</code> and <code>yVal</code> <code>constexpr</code>--like this:</p>
  
  <pre><code>struct S {
    constexpr S(int x, int y): xVal(x), yVal(y) {}
    constexpr S(int x): xVal(x) {}
    constexpr S() {}
  
    constexpr int xVal { 0 };         // error!
    constexpr int yVal { 0 };         // error!
  };
  </code></pre>
  
  <p>As indicated, the code won't compile. The reason is that (per 7.1.5/1), only static data members may be declared <code>constexpr</code>. But <em>why</em>?</p>