title: compare shared_ptr object equality
body: <p>Is there an standard predicate to compare shared_ptr managed objects for equality.</p>
  
  <pre><code>template&lt;typename T, typename U&gt;
  inline bool target_equal(const T&amp; lhs, const U&amp; rhs)
  {
      if(lhs &amp;&amp; rhs)
      {
          return *lhs == *rhs;
      }
      else
      {
          return !lhs &amp;&amp; !rhs;
      }
  }
  </code></pre>
  
  <p>I want something similar to the above code, but will avoid defining it my self if there is already a standard solution.</p>