title: Issue with Cereal serialisation shared_ptr
body: <p>I ran into a problem when serialising shared pointers with Cereal. I have the following class struture:</p>
  
  <pre><code>class Source
  {
      std::string name;
  
      template&lt;class Archive&gt; void serialize(Archive &amp; archive)
      {
          archive(name);
          std::cout &lt;&lt; "SN: " &lt;&lt; "(" &lt;&lt; m_Name &lt;&lt; ")";
      }
  };
  
  class Event
  {
      std::shared_ptr&lt;Source&gt; source;
  
      const std::shared_ptr&lt;Source&gt;&amp; getSource() const 
      {
         return source;
      }
  
      template&lt;class Archive&gt; void serialize(Archive &amp; archive)
      {
          archive(source);
          std::clog &lt;&lt; "EN: " &lt;&lt; "(" &lt;&lt; getSource()-&gt;getName() &lt;&lt; ")" &lt;&lt; "ENP: " &lt;&lt; source.get() &lt;&lt; std::endl;
  }
  </code></pre>
  
  <p>};</p>
  
  <p>By running my main code I have the following output:</p>
  
  <p>SN: (l_32)EN: (l_32)ENP: 0x7f9f90001450</p>
  
  <p>SN: (l_13)EN: (l_13)ENP: 0x7f9f90001b80</p>
  
  <p>SN: (l_4) EN: (l_4) ENP: 0x7f9f90002100</p>
  
  <p>SN: (l_58)EN: (l_58)ENP: 0x7f9f90002280</p>
  
  <p>SN: (l_27)EN: (l_27)ENP: 0x7f9f90002340</p>
  
  <p>SN: (l_81)EN: (l_81)ENP: 0x7f9f900028b0</p>
  
  <p>SN: (l_65)EN: (l_65)ENP: 0x7f9f90002970</p>
  
  <p>SN: (l_49)EN: (l_49)ENP: 0x7f9f90003140</p>
  
  <p>SN: (l_73)EN: (l_73)ENP: 0x7f9f90003200</p>
  
  <p>SN: (l_99)EN: (l_99)ENP: 0x7f9f900032c0</p>
  
  <p>SN: (l_33)EN: (l_33)ENP: 0x7f9f90003380</p>
  
  <p>SN: (l_14)EN: (l_14)ENP: 0x7f9f90002af0</p>
  
  <p><strong>EN: (l_5) ENP: 0x7f9f90001510</strong></p>
  
  <p>It looks like that for the Event (l_5), it does not serializes  the shared pointer. According to the documentation of Cereal, this happens if the shared pointer is already serialized. By printing out the addresses as well I can conclude that this is not the case.</p>
  
  <p>Could you please advise?</p>