epoc32/include/stdapis/boost/indirect_reference.hpp
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:27:01 +0100
branchSymbian2
changeset 3 e1b950c65cb4
permissions -rw-r--r--
Attempt to represent the S^2->S^3 header reorganisation as a series of "hg rename" operations
     1 #ifndef INDIRECT_REFERENCE_DWA200415_HPP
     2 # define INDIRECT_REFERENCE_DWA200415_HPP
     3 
     4 //
     5 // Copyright David Abrahams 2004. Use, modification and distribution is
     6 // subject to the Boost Software License, Version 1.0. (See accompanying
     7 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
     8 //
     9 // typename indirect_reference<P>::type provides the type of *p.
    10 //
    11 // http://www.boost.org/libs/iterator/doc/pointee.html
    12 //
    13 
    14 # include <boost/detail/is_incrementable.hpp>
    15 # include <boost/iterator/iterator_traits.hpp>
    16 # include <boost/type_traits/remove_cv.hpp>
    17 # include <boost/mpl/eval_if.hpp>
    18 # include <boost/pointee.hpp>
    19 
    20 namespace boost { 
    21 
    22 namespace detail
    23 {
    24   template <class P>
    25   struct smart_ptr_reference
    26   {
    27       typedef typename boost::pointee<P>::type& type;
    28   };
    29 }
    30 
    31 template <class P>
    32 struct indirect_reference
    33   : mpl::eval_if<
    34         detail::is_incrementable<P>
    35       , iterator_reference<P>
    36       , detail::smart_ptr_reference<P>
    37     >
    38 {
    39 };
    40   
    41 } // namespace boost
    42 
    43 #endif // INDIRECT_REFERENCE_DWA200415_HPP