123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- // 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_CHECK_MSVC_DWA2006429_HPP
- # define BOOST_CONCEPT_CHECK_MSVC_DWA2006429_HPP
- # include <boost/preprocessor/cat.hpp>
- # include <boost/concept/detail/backward_compatibility.hpp>
- # include <boost/config.hpp>
- # ifdef BOOST_OLD_CONCEPT_SUPPORT
- # include <boost/concept/detail/has_constraints.hpp>
- # include <boost/type_traits/conditional.hpp>
- # endif
- # ifdef BOOST_MSVC
- # pragma warning(push)
- # pragma warning(disable:4100)
- # endif
- namespace boost { namespace concepts {
- template <class Model>
- struct check
- {
- virtual void failed(Model* x)
- {
- x->~Model();
- }
- };
- # ifndef BOOST_NO_PARTIAL_SPECIALIZATION
- struct failed {};
- template <class Model>
- struct check<failed ************ Model::************>
- {
- virtual void failed(Model* x)
- {
- x->~Model();
- }
- };
- # endif
- # ifdef BOOST_OLD_CONCEPT_SUPPORT
-
- namespace detail
- {
- // No need for a virtual function here, since evaluating
- // not_satisfied below will have already instantiated the
- // constraints() member.
- struct constraint {};
- }
- template <class Model>
- struct require
- : boost::conditional<
- not_satisfied<Model>::value
- , detail::constraint
- # ifndef BOOST_NO_PARTIAL_SPECIALIZATION
- , check<Model>
- # else
- , check<failed ************ Model::************>
- # endif
- >::type
- {};
-
- # else
-
- template <class Model>
- struct require
- # ifndef BOOST_NO_PARTIAL_SPECIALIZATION
- : check<Model>
- # else
- : check<failed ************ Model::************>
- # endif
- {};
-
- # endif
-
- # if BOOST_WORKAROUND(BOOST_MSVC, == 1310)
- //
- // The iterator library sees some really strange errors unless we
- // do things this way.
- //
- template <class Model>
- struct require<void(*)(Model)>
- {
- virtual void failed(Model*)
- {
- require<Model>();
- }
- };
- # define BOOST_CONCEPT_ASSERT_FN( ModelFnPtr ) \
- enum \
- { \
- BOOST_PP_CAT(boost_concept_check,__LINE__) = \
- sizeof(::boost::concepts::require<ModelFnPtr>) \
- }
-
- # else // Not vc-7.1
-
- template <class Model>
- require<Model>
- require_(void(*)(Model));
-
- # define BOOST_CONCEPT_ASSERT_FN( ModelFnPtr ) \
- enum \
- { \
- BOOST_PP_CAT(boost_concept_check,__LINE__) = \
- sizeof(::boost::concepts::require_((ModelFnPtr)0)) \
- }
-
- # endif
- }}
- # ifdef BOOST_MSVC
- # pragma warning(pop)
- # endif
- #endif // BOOST_CONCEPT_CHECK_MSVC_DWA2006429_HPP
|