Home | History | Annotate | Download | only in concept
      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_USAGE_DWA2006919_HPP
      5 # define BOOST_CONCEPT_USAGE_DWA2006919_HPP
      6 
      7 # include <boost/concept/assert.hpp>
      8 # include <boost/detail/workaround.hpp>
      9 # include <boost/concept/detail/backward_compatibility.hpp>
     10 
     11 namespace boost { namespace concepts {
     12 
     13 # if BOOST_WORKAROUND(__GNUC__, == 2)
     14 
     15 #  define BOOST_CONCEPT_USAGE(model) ~model()
     16 
     17 # else
     18 
     19 template <class Model>
     20 struct usage_requirements
     21 {
     22     ~usage_requirements() { ((Model*)0)->~Model(); }
     23 };
     24 
     25 #  if BOOST_WORKAROUND(__GNUC__, <= 3)
     26 
     27 #   define BOOST_CONCEPT_USAGE(model)                                    \
     28       model(); /* at least 2.96 and 3.4.3 both need this :( */           \
     29       BOOST_CONCEPT_ASSERT((boost::concepts::usage_requirements<model>)); \
     30       ~model()
     31 
     32 #  else
     33 
     34 #   define BOOST_CONCEPT_USAGE(model)                                    \
     35       BOOST_CONCEPT_ASSERT((boost::concepts::usage_requirements<model>)); \
     36       ~model()
     37 
     38 #  endif
     39 
     40 # endif
     41 
     42 }} // namespace boost::concepts
     43 
     44 #endif // BOOST_CONCEPT_USAGE_DWA2006919_HPP
     45