title: which is the full-expression when the rule says the full-expression of initialization
body: <pre class="lang-cpp prettyprint-override"><code>struct S {
    constexpr S(int i): I(i),D(i) { }       // full-expressions are initialization of I and initialization of D 
  private:
    int I;
    int D;
  };
  int main(){
    constexpr S s1 = 1;  //full-expression comprises call of S​::​S(int)
  }
  </code></pre>
  <p>According to the definition of full-expression:</p>
  <blockquote>
  <p>A full-expression is</p>
  <blockquote>
  <ol>
  <li>an unevaluated operand,</li>
  <li>a constant-expression,</li>
  <li>an init-declarator or a mem-initializer, including the constituent expressions of the initializer,</li>
  <li>an invocation of a destructor generated at the end of the lifetime of an object other than a temporary object, or</li>
  <li>an expression that is not a subexpression of another expression and that is not otherwise part of a full-expression.</li>
  </ol>
  </blockquote>
  </blockquote>
  <blockquote>
  <p>For an initializer, performing the initialization of the entity (including evaluating default member initializers of an aggregate) is also considered part of the full-expression.</p>
  </blockquote>
  <p>The bullet 3 says <code>s1 = 1</code> is a full-expression because it's an init-declarator and <code>I(i)</code> is a full-expression due to it's a <code>mem-initializer</code> and similarly for <code>D(i)</code>.  It means that initialize entity <code>s1</code> can contain more than one full-expression?  In this case, Which is the full-expression of the initialization in this set of full-expressions?</p>