title: Compiler changes the type variable type from uin16_t to int when it's marked as constexpr
body: <p>I've encountered a weird problem trying to flip all bits of my number.</p>
  <pre><code>#include &lt;cstdint&gt;
  
  constexpr uint16_t DefaultValueForPortStatus { 0xFFFF };
  
  void f(uint16_t x)
  {
  
  }
  
  int main()
  {
    f(~(DefaultValueForPortStatus));
  }
  </code></pre>
  <p>When I'm compiling this program (GCC trunk) I'm getting an error:</p>
  <blockquote>
  <p>warning: unsigned conversion from 'int' to 'uint16_t' {aka 'short unsigned int'} changes value from '-65536' to '0' [-Woverflow]</p>
  </blockquote>
  <p>When I remove constexpr from type specifier, then no warning appears.
  Why is that? Why does the uint16_t constexpr variable is being changed by the compiler to int, whereas in the case of non-constexpr everything is fine?</p>