title: Can't assign string literal to boxed std::string vector
body: <p>This is a simplified version of my type system:</p>
  
  <pre><code>#include &lt;string&gt;
  #include &lt;vector&gt;
  
  template&lt;typename T&gt;
  class Box {
  public:
      Box(const T&amp; value) : _value(value) {};
  private:
      T _value;
      /* ... */
  };
  
  typedef Box&lt;int&gt; Int;
  typedef Box&lt;double&gt; Double;
  typedef Box&lt;std::string&gt; String;
  
  int main(int argc, char* argv[]) {
      String a("abc");
      std::vector&lt;String&gt; b = { std::string("abc"), std::string("def") };
  
      // error C2664: 'Box&lt;std::string&gt;::Box(const Box&lt;std::string&gt; &amp;)' : cannot convert argument 1 from 'const char' to 'const std::string &amp;'
      std::vector&lt;String&gt; c = { "abc", "def" };
  }
  </code></pre>
  
  <p>While <code>a</code> and <code>b</code> compile, <code>c</code> does not and the reason seems to be that I try to initialize from <code>const char</code>. This raises two questions:</p>
  
  <ol>
  <li><p>Why is <code>b</code> possible but not <code>c</code>? Is it because of the nested template in <code>std::vector&lt;Box&lt;std::string&gt; &gt;</code>?</p></li>
  <li><p>Can I make <code>c</code> work without destroying the general boxing mechanism (cf. <code>typedef Box&lt;double&gt; Double</code>?</p></li>
  </ol>