title: Why are vector's multi-argument constructors taking construction parameters not marked "explicit"?
body: <p>I observed the following vector constructors in the Standard C++ library</p>
  
  <pre><code>explicit vector(size_type n);
  vector(size_type n, const T&amp; value, const Allocator&amp; = Allocator());
  </code></pre>
  
  <p>Is there a reason why the second constructor is not marked <code>explicit</code>? This compiles, and makes me feel bad</p>
  
  <pre><code>void f(vector&lt;string&gt;);
  
  int main() {
    f({10, "foo"});
  }
  </code></pre>
  
  <p>While if I omit the <code>"foo"</code>, it doesn't compile and that is what I expect when I pass a pair (compound) value of an int and a string to a function that wants a vector of strings. </p>