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 + -
显示快捷键?