title: Unexpected behaviour with overload resolution when using std::initializer_list with a boolean overloaded function
body: <p>I am trying to use an initialization list with different overloaded function as shown in the example code below. It seems that the boolean overload and the array overload has an exclusive existentialism with the mapped overload.</p>
  
  <pre><code>#include &lt;string&gt;
  struct Spam
  {
      Spam();
      Spam(bool flag);   //(1)
      Spam(const std::initializer_list&lt;std::pair&lt;const std::string, Spam &gt; &gt; &amp;  il); //(2)
      Spam(const std::initializer_list&lt;Spam &gt; &amp; il); //(3)
  };
  int main()
  {
      Spam({ { "1", Spam() }, { "2", Spam() } });
  }
  </code></pre>
  
  <p>That means in the above code both <code>Spam(bool flag)</code> and <code>Spam(const std::initializer_list&lt;Spam &gt; &amp; il)</code> cannot co-exist when using the mapped version of initialization list <code>Spam(const std::initializer_list&lt;std::pair&lt;const std::string, Spam &gt; &gt; &amp;  il)</code>. Compiler complains </p>
  
  <pre><code>error C2440: '&lt;function-style-cast&gt;' : cannot convert from 'initializer-list' to 'Spam'
  </code></pre>
  
  <p>This behaviour was initially observed with VC12 and later was replicated with <a href="http://ideone.com/x970di" rel="nofollow">G++ [See Demo]</a> and <a href="http://coliru.stacked-crooked.com/a/175d25bfabb13b51" rel="nofollow">Clang [See Demo]</a>
  The behaviour is unexpected. What is the reason for this strange behaviour and how it can be resolved?</p>