• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_DETAIL_CONCEPT_DEF_DWA200651_HPP
5 # define BOOST_CONCEPT_DETAIL_CONCEPT_DEF_DWA200651_HPP
6 # include <boost/preprocessor/seq/for_each_i.hpp>
7 # include <boost/preprocessor/seq/enum.hpp>
8 # include <boost/preprocessor/comma_if.hpp>
9 # include <boost/preprocessor/cat.hpp>
10 #endif // BOOST_CONCEPT_DETAIL_CONCEPT_DEF_DWA200651_HPP
11 
12 // BOOST_concept(SomeName, (p1)(p2)...(pN))
13 //
14 // Expands to "template <class p1, class p2, ...class pN> struct SomeName"
15 //
16 // Also defines an equivalent SomeNameConcept for backward compatibility.
17 // Maybe in the next release we can kill off the "Concept" suffix for good.
18 # define BOOST_concept(name, params)                                            \
19     template < BOOST_PP_SEQ_FOR_EACH_I(BOOST_CONCEPT_typename,~,params) >       \
20     struct name; /* forward declaration */                                      \
21                                                                                 \
22     template < BOOST_PP_SEQ_FOR_EACH_I(BOOST_CONCEPT_typename,~,params) >       \
23     struct BOOST_PP_CAT(name,Concept)                                           \
24       : name< BOOST_PP_SEQ_ENUM(params) >                                       \
25     {                                                                           \
26     };                                                                          \
27                                                                                 \
28     template < BOOST_PP_SEQ_FOR_EACH_I(BOOST_CONCEPT_typename,~,params) >       \
29     struct name
30 
31 // Helper for BOOST_concept, above.
32 # define BOOST_CONCEPT_typename(r, ignored, index, t) \
33     BOOST_PP_COMMA_IF(index) typename t
34 
35