| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 | // Copyright David Abrahams 2006. 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_CONCEPT_DETAIL_GENERAL_DWA2006429_HPP# define BOOST_CONCEPT_DETAIL_GENERAL_DWA2006429_HPP# include <boost/config.hpp># include <boost/preprocessor/cat.hpp># include <boost/concept/detail/backward_compatibility.hpp># ifdef BOOST_OLD_CONCEPT_SUPPORT#  include <boost/concept/detail/has_constraints.hpp>#  include <boost/type_traits/conditional.hpp># endif// This implementation works on Comeau and GCC, all the way back to// 2.95namespace boost { namespace concepts {template <class ModelFn>struct requirement_;namespace detail{  template <void(*)()> struct instantiate {};}template <class Model>struct requirement{    static void failed() { ((Model*)0)->~Model(); }};struct failed {};template <class Model>struct requirement<failed ************ Model::************>{    static void failed() { ((Model*)0)->~Model(); }};# ifdef BOOST_OLD_CONCEPT_SUPPORTtemplate <class Model>struct constraint{    static void failed() { ((Model*)0)->constraints(); }};  template <class Model>struct requirement_<void(*)(Model)>  : boost::conditional<        concepts::not_satisfied<Model>::value      , constraint<Model>      , requirement<failed ************ Model::************>    >::type{};  # else// For GCC-2.x, these can't have exactly the same nametemplate <class Model>struct requirement_<void(*)(Model)>    : requirement<failed ************ Model::************>{};  # endif#  define BOOST_CONCEPT_ASSERT_FN( ModelFnPtr )             \    typedef ::boost::concepts::detail::instantiate<          \    &::boost::concepts::requirement_<ModelFnPtr>::failed>    \      BOOST_PP_CAT(boost_concept_check,__LINE__)             \      BOOST_ATTRIBUTE_UNUSED}}#endif // BOOST_CONCEPT_DETAIL_GENERAL_DWA2006429_HPP
 |