Why this constant expression is not constant : <p>I have the following C listing:</p>

<pre class="lang-c prettyprint-override"><code>static const int constant = (0 | ((((1 &lt;&lt; 6) - 1) &lt;&lt; ((((0 + 8) + 8) + 3) + 7)) &amp; ((1) &lt;&lt; ((((0 + 8) + 8) + 3) + 7))) | ((((1 &lt;&lt; 7) - 1) &lt;&lt; (((0 + 8) + 8) + 3)) &amp; ((0) &lt;&lt; (((0 + 8) + 8) + 3))) | ((((1 &lt;&lt; 3) - 1) &lt;&lt; ((0 + 8) + 8)) &amp; ((0) &lt;&lt; ((0 + 8) + 8))) | ((((1 &lt;&lt; 8) - 1) &lt;&lt; 0) &amp; ((1) &lt;&lt; 0)));

int main(int argc, char** argv)
{
    return constant;
}

</code></pre>

<p>When I am trying to compile this with GCC-9.1 using this command line:</p>

<pre><code>gcc-9 -Werror -Wpedantic main.c
</code></pre>

<p>I am getting this error:</p>

<pre><code>main.c:1:29: error: initializer element is not a constant expression [-Werror=pedantic]
</code></pre>

<p>Why is that? Is this a compiler bug? Clearly, <code>constant</code> is initialized with a constant expression.</p>
