Listing 1

// TR1 additions to header <memory>
namespace std {
 namespace tr1 {
    // SHARED POINTERS
template<class Ty> class shared_ptr;
template<class Ty1, class Ty2>
  bool operator==(const shared_ptr<Ty1>&, const shared_ptr<Ty2>&);
template<class Ty1, class Ty2>
  bool operator!=(const shared_ptr<Ty1>&, const shared_ptr<Ty2>&);
template<class Ty1, class Ty2>
  bool operator<(const shared_ptr<Ty1>&, const shared_ptr<Ty2>&);
template<class Elem, class Tr, class Ty>
  basic_ostream<Elem, Tr>& operator<<(
    basic_ostream<Elem, Tr>&, const shared_ptr<Ty>&);
template<class Ty>
  void swap(shared_ptr<Ty>&, shared_ptr<Ty>&);
template<class D, class Ty>
  D *get_deleter(const shared_ptr<Ty>&);

    // FUNCTIONS
template<class Ty, class Other>
  shared_ptr<Ty> const_pointer_cast(const shared_ptr<Other>&);
template<class Ty, class Other>
  shared_ptr<Ty> dynamic_pointer_cast(const shared_ptr<Other>&);
template<class Ty, class Other>
  shared_ptr<Ty> static_pointer_cast(const shared_ptr<Other>&);
} };