title: Left shifts and right shifts on boolean
body: <p>I am trying to understand exaclty how integral promotion works with arithmetic shifts operators. Particularly, I would like to know, which values of <code>a, b, c, d, e, f, g, h</code> are exactly defined according to the C++14 standard, and which ones can depend on the platform/hardware/compiler (assuming that <code>sizeof(int) == 4</code>).</p>
  
  <pre><code>int a = true &lt;&lt; 3;
  int b = true &gt;&gt; 3;
  
  int c = true &lt;&lt; 3U;
  int d = true &gt;&gt; 3U;
  
  int e = true &lt;&lt; 31;
  int f = true &gt;&gt; 31;
  
  int g = true &lt;&lt; 31U;
  int h = true &gt;&gt; 31U;
  </code></pre>