title: Why does Clang complain an "initializer element is not a compile-time constant" for a local compound literal?
body: <p>With the following code,</p>
  <pre><code>#define REINT(T, X) (union {__typeof__(X) x; T t;}){X}.t
  
  int f2i(float x) {
    return REINT(int, x);
  }
  
  float i2f(int x) {
    return REINT(float, x);
  }
  
  float f2i2f(float x) {
    return REINT(float, REINT(int, x));
  }
  </code></pre>
  <p>Clang complains about <code>f2i2f</code> that an &quot;initializer element is not a compile-time constant&quot;. This seems odd because compound literals &quot;have automatic storage duration associated with
  the enclosing block&quot; (6.5.2.5p5), and the elements in the initializer list for such objects don't have to be compile-time constants.</p>