PageRenderTime 23ms CodeModel.GetById 12ms app.highlight 6ms RepoModel.GetById 3ms app.codeStats 0ms

/Src/Dependencies/Boost/boost/concept_check/msvc.hpp

http://hadesmem.googlecode.com/
C++ Header | 90 lines | 65 code | 17 blank | 8 comment | 2 complexity | 9f498c149e285bf770281193c3d58f88 MD5 | raw file
 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
 6
 7# ifdef BOOST_OLD_CONCEPT_SUPPORT
 8#  include <boost/concept_check/has_constraints.hpp>
 9#  include <boost/mpl/if.hpp>
10# endif
11
12
13namespace boost
14{
15  namespace concept_checking
16  {
17    template <class Model>
18    struct concept_check_
19    {
20        virtual void failed(Model* x)
21        {
22            x->~Model();
23        }
24    };
25  }
26  
27# ifdef BOOST_OLD_CONCEPT_SUPPORT
28  
29  namespace concept_checking
30  {
31    template <class Model>
32    struct constraint_check
33    {
34        virtual void failed(Model* x)
35        {
36            x->constraints();
37        }
38    };
39  }
40
41  template <class Model>
42  struct concept_check
43    : mpl::if_c<
44          concept_checking::has_constraints<Model>::value
45        , concept_checking::constraint_check<Model>
46        , concept_checking::concept_check_<Model>
47      >::type
48  {};
49      
50# else
51  
52  template <class Model>
53  struct concept_check
54    : concept_checking::concept_check_<Model>
55  {};
56  
57# endif
58
59# if BOOST_WORKAROUND(BOOST_MSVC, == 1310)
60
61  //
62  // The iterator library sees some really strange errors unless we
63  // use partial specialization to extract the model type with
64  // msvc-7.1
65  // 
66  template <class Model>
67  struct concept_check<void(*)(Model)>
68    : concept_check<Model>
69  { };
70
71# define BOOST_CONCEPT_ASSERT( ModelInParens )                          \
72  enum { BOOST_PP_CAT(boost_concept_check,__LINE__) =                   \
73         sizeof(::boost::concept_check<void(*) ModelInParens>)          \
74  }
75  
76# else
77  
78  template <class Model>
79  concept_check<Model>
80  concept_check_(void(*)(Model));
81  
82# define BOOST_CONCEPT_ASSERT( ModelInParens )                          \
83  enum { BOOST_PP_CAT(boost_concept_check,__LINE__) =                   \
84         sizeof(::boost::concept_check_((void(*) ModelInParens)0))      \
85  }
86  
87# endif 
88}
89
90#endif // BOOST_CONCEPT_CHECK_MSVC_DWA2006429_HPP