title: Nested `constexpr` function calls before definition in a constant-expression context
body: <p>From what I gather from <a href="https://stackoverflow.com/a/29435060/3233393">this answer</a>, a <code>constexpr</code> function's result is not a constant-expression if the function has not been declared yet. What surprises me is the following code snippet :</p>
  
  <pre><code>constexpr int f();
  
  constexpr int g() {
      return f();
  }
  
  constexpr int f() {
      return 42;
  }
  
  int main() {
      constexpr int i = g();
      return i;
  }
  </code></pre>
  
  <p>This compiles without trouble and works. Moving <code>f</code>'s definition past main triggers <code>error: 'constexpr int f()' used before its definition</code>, as I would expect.</p>
  
  <p>I presume that it works because <code>f</code> has been defined before the call to <code>g</code>, thus both calls are constant expressions.</p>
  
  <p>Why are <code>f()</code> and <code>g()</code> apparently constant-expressions, even though <code>f</code> isn't defined when it is called by <code>g</code>? How is this described by the Standard?</p>
  
  <p>I have tested this on Coliru's GCC 6.1.0 and Clang 3.8.0.</p>