title: C++ automatic implicit conversion from const char to string
body: <p>Ok so Im just learning templates for the first time and so I was toying around creating my own  template class that mimics its underlying type which is a vector. Keep in mind that the call to push_back just calls the push_back method of the underlying vector.</p>
  
  <pre><code>vector&lt;string&gt; sV;
  sV.push_back("ha");       //ok: converts from const char[3] to string
  
  Foo&lt;string&gt; fS;
  fS.push_back("ha");      //error: const char[3] does not match the argument list
  </code></pre>
  
  <p>Is there a way I can fix this? I just want my template to feel as natural as if I'm using the real thing.</p>
  
  <hr>
  
  <p><strong>EDIT : This is basically the body of the class</strong></p>
  
  <pre><code>template &lt;typename T&gt; class FooPtr;
  template &lt;typename T&gt;
  class Foo{
      friend class FooPtr&lt;T&gt;;
  public:
      Foo() {data-&gt;make_shared(vector&lt;T&gt;); }
  #ifdef INITIALIZER_LIST
      Foo(initializer_list&lt;T&gt;);
  #endif
      void push_back(T &amp;t) { data-&gt;push_back(t); }
      void push_back(T &amp;&amp;t) { data-&gt;push_back(move(t)); }
      bool empty() { if (data-&gt;size() == 0) return true; }
      FooPtr&lt;T&gt; insert(size_t, T&amp;);
      T&amp; operator[](size_t);
      T&amp; front();
      T&amp; back();
      FooPtr&lt;T&gt; begin() { return FooPtr&lt;T&gt;(*this); }
      FooPtr&lt;T&gt; end() { return FooPtr&lt;T&gt;(*this, data-&gt;size()); }
      void pop_back() { data-&gt;pop_back(); }
      void pop_front() { data-&gt;pop_front; }
  private:
      void check(const string&amp;, size_t = 0);
      shared_ptr&lt;vector&lt;T&gt;&gt; data;
  };
  </code></pre>