1 // Copyright David Abrahams 2006. Distributed under the Boost
2 // Software License, Version 1.0. (See accompanying
3 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
4 #ifndef BOOST_CONCEPT_CHECK_MSVC_DWA2006429_HPP
5 # define BOOST_CONCEPT_CHECK_MSVC_DWA2006429_HPP
7 # include <boost/preprocessor/cat.hpp>
8 # include <boost/concept/detail/backward_compatibility.hpp>
10 # ifdef BOOST_OLD_CONCEPT_SUPPORT
11 # include <boost/concept/detail/has_constraints.hpp>
12 # include <boost/mpl/if.hpp>
16 namespace boost { namespace concepts {
19 template <class Model>
22 virtual void failed(Model* x)
28 # ifndef BOOST_NO_PARTIAL_SPECIALIZATION
30 template <class Model>
31 struct check<failed ************ Model::************>
33 virtual void failed(Model* x)
40 # ifdef BOOST_OLD_CONCEPT_SUPPORT
44 // No need for a virtual function here, since evaluating
45 // not_satisfied below will have already instantiated the
46 // constraints() member.
50 template <class Model>
53 not_satisfied<Model>::value
55 # ifndef BOOST_NO_PARTIAL_SPECIALIZATION
58 , check<failed ************ Model::************>
65 template <class Model>
67 # ifndef BOOST_NO_PARTIAL_SPECIALIZATION
70 : check<failed ************ Model::************>
76 # if BOOST_WORKAROUND(BOOST_MSVC, == 1310)
79 // The iterator library sees some really strange errors unless we
80 // do things this way.
82 template <class Model>
83 struct require<void(*)(Model)>
85 virtual void failed(Model*)
91 # define BOOST_CONCEPT_ASSERT_FN( ModelFnPtr ) \
94 BOOST_PP_CAT(boost_concept_check,__LINE__) = \
95 sizeof(::boost::concepts::require<ModelFnPtr>) \
100 template <class Model>
102 require_(void(*)(Model));
104 # define BOOST_CONCEPT_ASSERT_FN( ModelFnPtr ) \
107 BOOST_PP_CAT(boost_concept_check,__LINE__) = \
108 sizeof(::boost::concepts::require_((ModelFnPtr)0)) \
114 #endif // BOOST_CONCEPT_CHECK_MSVC_DWA2006429_HPP