title: Are there features (in particular, structured binding) which I can't use without 'auto'?
body: <p><code>auto</code> keyword was introduced to simplify the code. In particular, iterating over stl containers became way easier and better-looking without having to use the ugly <code>std::vector&lt;MyType&gt;::iterator</code> syntax every time you want to loop over it. However, it was still possible to write code without using <code>auto</code> which would do exactly the same thing.</p>
  
  <p>Now (I think) you can't use certain features without <code>auto</code>, in particular structured bindings:</p>
  
  <pre><code>std::tuple&lt;int, int&amp;&gt; f();
  auto [x, y] = f();
  </code></pre>
  
  <p>So, two questions:</p>
  
  <ol>
  <li>Am I correct that there's no way to initialize <code>[x, y]</code> without using <code>auto</code> (still using structured bindings)? Is there a way to initialize it explicitly: <code>*explicit_type* [x, y] = f();</code>?</li>
  <li>What other features require using <code>auto</code>?</li>
  </ol>