From f29eb40c5baa18c55a5f4fee30a59aec36ee1b0c Mon Sep 17 00:00:00 2001 From: Dave Abrahams Date: Sun, 15 Sep 2002 18:18:36 +0000 Subject: [PATCH] bugfix [SVN r15335] --- .../is_member_function_pointer.hpp | 113 ++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 include/boost/type_traits/is_member_function_pointer.hpp diff --git a/include/boost/type_traits/is_member_function_pointer.hpp b/include/boost/type_traits/is_member_function_pointer.hpp new file mode 100644 index 0000000..719ae5d --- /dev/null +++ b/include/boost/type_traits/is_member_function_pointer.hpp @@ -0,0 +1,113 @@ + +// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard +// Hinnant & John Maddock 2000. Permission to copy, use, modify, +// sell and distribute this software is granted provided this +// copyright notice appears in all copies. This software is provided +// "as is" without express or implied warranty, and with no claim as +// to its suitability for any purpose. +// +// See http://www.boost.org for most recent version including documentation. + +#ifndef BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED +#define BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED + +#include "boost/type_traits/config.hpp" + +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(__BORLANDC__) +# include "boost/type_traits/detail/is_mem_fun_pointer_impl.hpp" +#else +# include "boost/type_traits/is_reference.hpp" +# include "boost/type_traits/is_array.hpp" +# include "boost/type_traits/detail/is_mem_fun_pointer_tester.hpp" +# include "boost/type_traits/detail/yes_no_type.hpp" +# include "boost/type_traits/detail/false_result.hpp" +# include "boost/type_traits/detail/ice_or.hpp" +#endif + +// should be the last #include +#include "boost/type_traits/detail/bool_trait_def.hpp" + +namespace boost { + +#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(__BORLANDC__) + +BOOST_TT_AUX_BOOL_TRAIT_DEF1( + is_member_function_pointer + , T + , ::boost::type_traits::is_mem_fun_pointer_impl::value + ) + +#else + +#ifndef __BORLANDC__ + +namespace detail { + +template +struct is_member_function_pointer_select + : ::boost::type_traits::false_result +{ +}; + +template <> +struct is_member_function_pointer_select +{ + template struct result_ + { + static T& make_t; + typedef result_ self_type; + + BOOST_STATIC_CONSTANT( + bool, value = ( + 1 == sizeof(::boost::type_traits::is_mem_fun_pointer_tester(self_type::make_t)) + )); + }; +}; + +template +struct is_mem_fun_pointer_impl + : is_member_function_pointer_select< + ::boost::type_traits::ice_or< + ::boost::is_reference::value + , ::boost::is_array::value + >::value + >::template result_ +{ +}; + +} // namespace detail + +#else // Borland C++ + +template +struct is_member_function_pointer_impl +{ + static T& m_t; + BOOST_STATIC_CONSTANT( + bool, value = + (1 == sizeof(detail::is_member_function_pointer_helper(m_t))) ); +}; + +template +struct is_member_function_pointer_impl +{ + BOOST_STATIC_CONSTANT(bool, value = false); +}; + +#endif + +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_member_function_pointer,T,::boost::detail::is_mem_fun_pointer_impl::value) +BOOST_TT_AUX_BOOL_TRAIT_SPEC1(is_member_function_pointer,void,false) +#ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS +BOOST_TT_AUX_BOOL_TRAIT_SPEC1(is_member_function_pointer,void const,false) +BOOST_TT_AUX_BOOL_TRAIT_SPEC1(is_member_function_pointer,void volatile,false) +BOOST_TT_AUX_BOOL_TRAIT_SPEC1(is_member_function_pointer,void const volatile,false) +#endif + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION + +} // namespace boost + +#include "boost/type_traits/detail/bool_trait_undef.hpp" + +#endif // BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED