title: Implicit conversion failure from initializer list
body: <p>Consider the snippet:</p>
  
  <pre><code>#include &lt;unordered_map&gt;
  
  void foo(const std::unordered_map&lt;int,int&gt; &amp;) {}
  
  int main()
  {
          foo({});
  }
  </code></pre>
  
  <p>This fails with GCC 4.9.2 with the message:</p>
  
  <pre><code>map2.cpp:7:19: error: converting to ‘const std::unordered_map&lt;int, int&gt;’ from initializer list would use explicit constructor ‘std::unordered_map&lt;_Key, _Tp, _Hash, _Pred, _Alloc&gt;::unordered_map(std::unordered_map&lt;_Key, _Tp, _Hash, _Pred, _Alloc&gt;::size_type, const hasher&amp;, const key_equal&amp;, const allocator_type&amp;) [with _Key = int; _Tp = int; _Hash = std::hash&lt;int&gt;; _Pred = std::equal_to&lt;int&gt;; _Alloc = std::allocator&lt;std::pair&lt;const int, int&gt; &gt;; std::unordered_map&lt;_Key, _Tp, _Hash, _Pred, _Alloc&gt;::size_type = long unsigned int; std::unordered_map&lt;_Key, _Tp, _Hash, _Pred, _Alloc&gt;::hasher = std::hash&lt;int&gt;; std::unordered_map&lt;_Key, _Tp, _Hash, _Pred, _Alloc&gt;::key_equal = std::equal_to&lt;int&gt;; std::unordered_map&lt;_Key, _Tp, _Hash, _Pred, _Alloc&gt;::allocator_type = std::allocator&lt;std::pair&lt;const int, int&gt; &gt;]’
  </code></pre>
  
  <p>Testing with other compiler/library implementations:</p>
  
  <ul>
  <li>GCC &lt; 4.9 accepts this without complaining,</li>
  <li>Clang 3.5 with libstdc++ fails with a similar message,</li>
  <li>Clang 3.5 with libc++ accepts this,</li>
  <li>ICC 15.something accepts this (not sure which standard library it is using).</li>
  </ul>
  
  <p>A couple of more baffling points:</p>
  
  <ul>
  <li>replacing <code>std::unordered_map</code> with <code>std::map</code> makes the error go away,</li>
  <li>replacing <code>foo({})</code> with foo <code>foo({{}})</code> also makes the error go away.</li>
  </ul>
  
  <p>Also, replacing <code>{}</code> with a non-empty initializer list works as expected in all cases.</p>
  
  <p>So my main questions are:</p>
  
  <ul>
  <li>who is right here? Is the code above well-formed?</li>
  <li>What does the syntax with double curly braces <code>foo({{}})</code> exactly do to make the error go away?</li>
  </ul>
  
  <p><strong>EDIT</strong> fixed a couple of typos.</p>