// Copyright Daniel Wallin 2006. // Copyright Cromwell D. Enage 2017. // Distributed under 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) #ifndef BOOST_PARAMETER_TEMPLATE_KEYWORD_060203_HPP #define BOOST_PARAMETER_TEMPLATE_KEYWORD_060203_HPP namespace boost { namespace parameter { namespace aux { struct template_keyword_base { }; }}} // namespace boost::parameter::aux #include #if defined(BOOST_PARAMETER_CAN_USE_MP11) #include namespace boost { namespace parameter { namespace aux { template using is_template_keyword = ::std::is_base_of< ::boost::parameter::aux::template_keyword_base , typename ::std::remove_const< typename ::std::remove_reference::type >::type >; }}} // namespace boost::parameter::aux #else // !defined(BOOST_PARAMETER_CAN_USE_MP11) #include #include #include #if defined(BOOST_PARAMETER_HAS_PERFECT_FORWARDING) #include #include #else #include #include #endif namespace boost { namespace parameter { namespace aux { #if !defined(BOOST_PARAMETER_HAS_PERFECT_FORWARDING) template struct is_template_keyword_aux : ::boost::mpl::if_< ::boost::is_convertible< T* , ::boost::parameter::aux::template_keyword_base const* > , ::boost::mpl::true_ , ::boost::mpl::false_ >::type { }; #endif // BOOST_PARAMETER_HAS_PERFECT_FORWARDING template struct is_template_keyword : ::boost::mpl::if_< #if defined(BOOST_PARAMETER_HAS_PERFECT_FORWARDING) // Cannot use is_convertible<> to check if T is derived from // template_keyword_base. -- Cromwell D. Enage ::boost::is_base_of< ::boost::parameter::aux::template_keyword_base , typename ::boost::remove_const< typename ::boost::remove_reference::type >::type > , ::boost::mpl::true_ , ::boost::mpl::false_ #else ::boost::is_lvalue_reference , ::boost::mpl::false_ , ::boost::parameter::aux::is_template_keyword_aux #endif // BOOST_PARAMETER_HAS_PERFECT_FORWARDING >::type { }; }}} // namespace boost::parameter::aux #endif // BOOST_PARAMETER_CAN_USE_MP11 #endif // include guard