fix doc example typo
[boost.git] / boost / concept / detail / concept_def.hpp
blob79f628e9990044893fe81ce57f0052d16fd659b2
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
12 // BOOST_concept(SomeName, (p1)(p2)...(pN))
14 // Expands to "template <class p1, class p2, ...class pN> struct SomeName"
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 #if BOOST_WORKAROUND(__GNUC__, <= 3)
19 # define BOOST_concept(name, params) \
20 template < BOOST_PP_SEQ_FOR_EACH_I(BOOST_CONCEPT_typename,~,params) > \
21 struct name; /* forward declaration */ \
23 template < BOOST_PP_SEQ_FOR_EACH_I(BOOST_CONCEPT_typename,~,params) > \
24 struct BOOST_PP_CAT(name,Concept) \
25 : name< BOOST_PP_SEQ_ENUM(params) > \
26 { \
27 /* at least 2.96 and 3.4.3 both need this */ \
28 BOOST_PP_CAT(name,Concept)(); \
29 }; \
31 template < BOOST_PP_SEQ_FOR_EACH_I(BOOST_CONCEPT_typename,~,params) > \
32 struct name
33 #else
34 # define BOOST_concept(name, params) \
35 template < BOOST_PP_SEQ_FOR_EACH_I(BOOST_CONCEPT_typename,~,params) > \
36 struct name; /* forward declaration */ \
38 template < BOOST_PP_SEQ_FOR_EACH_I(BOOST_CONCEPT_typename,~,params) > \
39 struct BOOST_PP_CAT(name,Concept) \
40 : name< BOOST_PP_SEQ_ENUM(params) > \
41 { \
42 }; \
44 template < BOOST_PP_SEQ_FOR_EACH_I(BOOST_CONCEPT_typename,~,params) > \
45 struct name
46 #endif
48 // Helper for BOOST_concept, above.
49 # define BOOST_CONCEPT_typename(r, ignored, index, t) \
50 BOOST_PP_COMMA_IF(index) typename t