title: C++17 : Are 'Selection Statements with Initializer' broken?
body: <p>Let's say I start with;</p>
  
  <pre><code>...
  auto b = foo(a);
  if (!a &amp;&amp; (b &lt; c))
  {
      bar(b);
  }
  ...
  </code></pre>
  
  <p>And I notice I can optimize it for C++17 using the nice new 'selection statements with initializer' to become;</p>
  
  <pre><code>...
  if (!a &amp;&amp; (auto b = foo(a); (b &lt; c)))
  {
      bar(b);
  }
  ...
  </code></pre>
  
  <p>then, to my dismay, <strong><em>it doesn't compile</em></strong>, under GCC 7.2</p>
  
  <p>Now this IS in the spirit of the point of the change to C++17, neater <strong>AND</strong> would have neatly skipped the creation of the local variable if the first test, '!a' fails, which would be nice and neatly efficient.</p>
  
  <p>However, if I change it to;</p>
  
  <pre><code>...
  if (!a)
  {
      if (auto b = foo(a); (b &lt; c))
      {
          bar(b);
      }
  }
  ...
  </code></pre>
  
  <p>then it works... BUT what's the point since this is simply;</p>
  
  <pre><code>...
  if (!a)
  {
      auto b = foo(a); 
      if (b &lt; c)
      {
          bar(b);
      }
  }
  ...
  </code></pre>
  
  <p>which seems to spoil the whole point of having the 'statement selection with initializer' in the first place.</p>
  
  <p><strong>Q. So is this feature of C++17 broken or useless cosmetic fluff if it doesn't allow parts of conditions to have this feature and demands the ENTIRE 'if' carries it?</strong></p>