that_ptr.hpp

来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 88 行

HPP
88
字号
/*=============================================================================    Copyright (c) 2006-2007 Tobias Schwinger      Use modification and distribution are subject to the Boost Software     License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at    http://www.boost.org/LICENSE_1_0.txt).==============================================================================*/#if !defined(BOOST_FUSION_FUNCTIONAL_INVOCATION_DETAIL_THAT_PTR_HPP_INCLUDED)#define BOOST_FUSION_FUNCTIONAL_INVOCATION_DETAIL_THAT_PTR_HPP_INCLUDED#include <boost/get_pointer.hpp>#include <boost/utility/addressof.hpp>#include <boost/type_traits/config.hpp>#include <boost/type_traits/remove_reference.hpp>namespace boost { namespace fusion { namespace detail{    template <typename Wanted>    struct that_ptr    {      private:        typedef typename remove_reference<Wanted>::type pointee;        template <typename T>         static inline pointee * do_get_pointer(T &, pointee * x)         {            return x;        }        template <typename T>         static inline pointee * do_get_pointer(T & x, void const *)         {            return get_pointer(x);         }      public:        static inline pointee * get(pointee * x)        {            return x;         }        static inline pointee * get(pointee & x)        {            return boost::addressof(x);         }        template <typename T> static inline pointee * get(T & x)        {            return do_get_pointer(x, boost::addressof(x));         }    };    template <typename PtrOrSmartPtr> struct non_const_pointee;    namespace adl_barrier    {        using boost::get_pointer;        void const * BOOST_TT_DECL get_pointer(...); // fallback          template< typename T> char const_tester(T *);        template< typename T> long const_tester(T const *);        template <typename Ptr>        struct non_const_pointee_impl        {            static Ptr & what;            static bool const value =                sizeof(const_tester(get_pointer(what))) == 1;        };    }    template <typename PtrOrSmartPtr> struct non_const_pointee        : adl_barrier::non_const_pointee_impl<               typename remove_cv<                  typename remove_reference<PtrOrSmartPtr>::type >::type >    {        typedef non_const_pointee type;        typedef bool value_type;    };}}}#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?