title: std::make_shared string parameter
body: <p>I have stumbled across a weird weird </p>
  
  <p>animal.h</p>
  
  <pre><code>#ifndef ANIMAL_H
  #define ANIMAL_H
  #include &lt;string&gt;
  #include &lt;iostream&gt;
  #include &lt;vector&gt;
  #include &lt;memory&gt;
  class Animal
    {
    public:
      Animal(std::string aType);
      void someFunction();
    private:
      std::string type;
    };
  
  #endif // ANIMAL_H
  </code></pre>
  
  <p>animal.cpp</p>
  
  <pre><code>Animal::Animal(std::string aType) :
    type{aType}
    {
    }
  void Animal::someFunction(){
  /*Code*/
    }
  </code></pre>
  
  <p>I call std::make_shared on a class "Animal", with as parameter a <code>std::string</code></p>
  
  <p>main.cpp</p>
  
  <pre><code>auto sheep = std::make_shared&lt;Animal&gt;("Sheep");
  </code></pre>
  
  <p>Now I also have functions in the animal.cpp class.</p>
  
  <p>If I define <code>sheep</code> like this, I can't call any function on it.
  (<code>sheep-&gt;</code> doesn't do anything.)
  I get:</p>
  
  <pre><code>no matching function for call to 'Animal::someFunction()'
  </code></pre>
  
  <p>However if I change:</p>
  
  <pre><code>auto sheep = std::make_shared&lt;Animal&gt;("Sheep Blabla");
  </code></pre>
  
  <p>I can call a function on sheep. </p>
  
  <pre><code>sheep-&gt;someFunction();
  </code></pre>
  
  <p>gives me all the functions defined in the Animal class.
  Just by adding the word "Blabla" behind Sheep.</p>
  
  <p>How is this possible?</p>