| Home | Libraries | People | FAQ | More

## Struct template pointer_traits

boost::intrusive::pointer_traits

## Synopsis

    // In header: <boost/intrusive/pointer_traits.hpp>

    template<typename Ptr>
    struct pointer_traits {
      // types
      typedef Ptr              pointer;
      typedef unspecified_type element_type;
      typedef unspecified_type difference_type;
      typedef unspecified      rebind;
      typedef unspecified_type reference;

      // public static functions
      static pointer pointer_to(reference);
      template<typename UPtr> static pointer static_cast_from(const UPtr &);
      template<typename UPtr> static pointer const_cast_from(const UPtr &);
      template<typename UPtr> static pointer dynamic_cast_from(const UPtr &);
    };

## Description

pointer_traits is the implementation of C++11 std::pointer_traits class with some extensions like castings.

pointer_traits supplies a uniform interface to certain attributes of pointer-like types.

### `pointer_traits` public types

1. typedef Ptr pointer;

   The pointer type queried by this pointer_traits instantiation

2. typedef unspecified_type element_type;

   Ptr::element_type if such a type exists; otherwise, T if Ptr is a class template instantiation of the form SomePointer<T, Args>, where Args is zero or more type arguments ; otherwise , the specialization is ill-formed.

3. typedef unspecified_type difference_type;

   Ptr::difference_type if such a type exists; otherwise, std::ptrdiff_t.

4. typedef unspecified rebind;

   Ptr::rebind<U> if such a type exists; otherwise, SomePointer<U, Args> if Ptr is a class template instantiation of the form SomePointer<T, Args>, where Args is zero or more type arguments ; otherwise, the instantiation of rebind is ill-formed.

   For portable code for C++03 and C++11, <preformatted>typename rebind_pointer<U>::type</preformatted> shall be used instead of rebind<U> to obtain a pointer to U.

5. typedef unspecified_type reference;

   Ptr::reference if such a type exists (non-standard extension); otherwise, element_type &

### `pointer_traits` public static functions

1.     static pointer pointer_to(reference r);

   Remark: If element_type is (possibly cv-qualified) void, r type is unspecified; otherwise, it is element_type &.

   Returns: A dereferenceable pointer to r obtained by calling Ptr::pointer_to(r). Non-standard extension: If such function does not exist, returns pointer(addressof(r));

2.     template<typename UPtr> static pointer static_cast_from(const UPtr & uptr);

   Remark: Non-standard extension.

   Returns: A dereferenceable pointer to r obtained by calling Ptr::static_cast_from(r). If such function does not exist, returns pointer_to(static_cast<element_type&>(*uptr))

3.     template<typename UPtr> static pointer const_cast_from(const UPtr & uptr);

   Remark: Non-standard extension.

   Returns: A dereferenceable pointer to r obtained by calling Ptr::const_cast_from(r). If such function does not exist, returns pointer_to(const_cast<element_type&>(*uptr))

4.     template<typename UPtr> static pointer dynamic_cast_from(const UPtr & uptr);

   Remark: Non-standard extension.

   Returns: A dereferenceable pointer to r obtained by calling Ptr::dynamic_cast_from(r). If such function does not exist, returns pointer_to(dynamic_cast<element_type>(&*uptr))