title: When would I use std::integral_constant over constexpr?
body: <pre><code>#include &lt;iostream&gt;
  #include &lt;type_traits&gt;
  
  int main(){
  
      //creating an integral constant with constexpr
      constexpr unsigned int speed_of_light{299792458};
  
      //creating an integral constant with std::integral_constant
      typedef std::integral_constant&lt;unsigned int, 299792458&gt; speed_of_light_2;
  
      //using them
      std::cout &lt;&lt; speed_of_light/2 &lt;&lt; '\n';
      std::cout &lt;&lt; speed_of_light_2::value/2 &lt;&lt; '\n';
  
  }
  </code></pre>
  
  <p>What's special about <code>std::integral_constant</code> that I would choose to use it over <code>constexpr</code>?<br>
  Their behaviour and use cases look identical to me.  I'm trying to think of some kind of template scenario, where constexpr may not suffice. </p>