title: Preventing narrowing conversion when using std::initializer_list
body: <pre><code>#include &lt;iostream&gt;
  
  struct X {
      X(std::initializer_list&lt;int&gt; list) { std::cout &lt;&lt; "list" &lt;&lt; std::endl; }
      X(float f) { std::cout &lt;&lt; "float" &lt;&lt; std::endl; }
  };
  
  int main() {
      int x { 1.0f };
      X a(1);     // float (implicit conversion)
      X b{1};     // list
      X c(1.0f);  // float
      X d{1.0f};  // list (narrowing conversion) ARG!!!
  
      // warning: narrowing conversion of '1.0e+0f' from 'float' to 'int'
      // inside { } [-Wnarrowing]
  }
  </code></pre>
  
  <p>Is there any other way of removing <code>std::initializer_list</code> from an overload list (i.e., making the non-list ctors more favorable) instead of using the ()-initialization, or at least prohibiting narrowing conversion to happen (apart from turning warning into error)?</p>
  
  <p>I was using <a href="http://coliru.stacked-crooked.com/">http://coliru.stacked-crooked.com/</a> compiler which uses GCC 4.8.</p>