title: Why size_t arguments in template declaration need to be const?
body: <p>I can have</p>
  
  <pre><code>std::bitset&lt; 10 &gt; bitsetA;
  </code></pre>
  
  <p>or    </p>
  
  <pre><code>const size_t LengthB = 20;
  std::bitset&lt; LengthB &gt; bitsetB;
  </code></pre>
  
  <p>without any problem. </p>
  
  <p>But, if the length is not <code>const</code></p>
  
  <pre><code>size_t LengthC = 30;
  std::bitset&lt; LengthC &gt; bitsetC;  // Line 30, say
  </code></pre>
  
  <p>I face the following compilation error</p>
  
  <pre><code>'LengthC' cannot appear in a constant-expression
  template argument 1 is invalid
  </code></pre>
  
  <p>What is the reason for that?</p>
  
  <p>What would be the problem, for compiler and for user code, if line 30 was to be accepted? Is it because LengthC might have some alias?</p>