title: Why does auto x{3} deduce an initializer_list?
body: <p>I love <code>auto</code> in C++11. It's wonderful. But it has one inconsistency that really gets on my nerves, because I trip over it all the time:</p>
  
  <pre><code>int i = 3;       // i is an int with value 3
  int i = int{3};  // i is an int with value 3
  int i(3);        // i is an int with value 3 (possibly narrowing, not in this case)
  int i{3};        // i is an int with value 3
  
  auto i = 3;      // i is an int with value 3
  auto i = int{3}; // i is an int with value 3
  auto i(3);       // i is an int with value 3
  auto i{3};       // wtf, i is a std::initializer_list&lt;int&gt;?!
  </code></pre>
  
  <p>This strange behaviour is confusing for newcomers, and annoying for experienced users -- C++ has enough little inconsistencies and corner cases that one has to keep in mind as it is. Can anybody explain why standards committee decided to introduce a new one in this case?</p>
  
  <p>I could understand it if declaring a variable of type <code>std::initializer_list</code> was something that was useful or done frequently, but in my experience it's almost never deliberate -- and in the rare cases where you did want to do it, any of</p>
  
  <pre><code>std::initializer_list&lt;int&gt; l{3};
  auto l = std::initializer_list&lt;int&gt;{3};
  auto l = {3}; // No need to specify the type
  </code></pre>
  
  <p>would work just fine. So what's the reason behind the special case for <code>auto x{i}</code>?</p>