title: Does the default argument for a function parameter is considered as an initializer for that parameter?
body: <p>Suppose I have function declarations like these:</p>
  <pre><code>static const int R = 0;
  static const int I = 0;
  
  void f(const int&amp; r = R);
  void g(int i = I);
  </code></pre>
  <p>Per [dcl.fct.default]/1:</p>
  <blockquote>
  <p>If an initializer-clause is specified in a parameter-declaration this
  initializer-clause is used as a default argument [..]</p>
  </blockquote>
  <p>and per the grammar constructs, an <em>initializer</em> can comprise an <em>initializer-clause</em>. Right?</p>
  <p>So I concluded that <code>R</code> is an <em>initializer</em> for the parameter <code>r</code>, and <code>I</code> is also an <em>initializer</em> for the parameter <code>i</code>.</p>
  <p>Now per [const.expr]/2:</p>
  <blockquote>
  <p>A variable or temporary object <code>o</code> is constant-initialized if</p>
  <ul>
  <li>(2.1) either it has an <strong>initializer</strong> [..] and</li>
  <li>(2.2) the full-expression of its initialization is a constant expression [..]</li>
  </ul>
  </blockquote>
  <p>So both parameters have an initializer and also the full-expression of their initializations is a constant expression.</p>
  <p>So, Are both parameters <code>r</code> and <code>i</code> considered <em>constant-initialized</em>?</p>