Add Boost.Test karmic valgrind suppressions
[senf.git] / boost_ext / boost / bimap / relation / detail / static_access_builder.hpp
1 // Boost.Bimap
2 //
3 // Copyright (c) 2006-2007 Matias Capeletto
4 //
5 // Distributed under the Boost Software License, Version 1.0.
6 // (See accompanying file LICENSE_1_0.txt or copy at
7 // http://www.boost.org/LICENSE_1_0.txt)
8
9
10 /// \file relation/detail/static_access_builder.hpp
11 /// \brief Define macros to help building metafunctions
12
13 #ifndef BOOST_BIMAP_RELATION_DETAIL_STATIC_ACCESS_BUILDER_HPP
14 #define BOOST_BIMAP_RELATION_DETAIL_STATIC_ACCESS_BUILDER_HPP
15
16 #if defined(_MSC_VER) && (_MSC_VER>=1200)
17 #pragma once
18 #endif
19
20 #include <boost/config.hpp>
21
22 #include <boost/bimap/relation/support/is_tag_of_member_at.hpp>
23 #include <boost/bimap/detail/debug/static_error.hpp>
24 #include <boost/utility/enable_if.hpp>
25 #include <boost/preprocessor/cat.hpp>
26
27
28
29 /******************************************************************************
30               BIMAP SYMMETRIC STATIC ACCESS INTERFACE
31 *******************************************************************************
32
33 template< class Tag, class SYMETRIC_TYPE >
34 struct NAME
35 {
36     -UNDEFINED BODY-;
37 };
38
39 ******************************************************************************/
40
41
42 /*===========================================================================*/
43 #define BOOST_BIMAP_SYMMETRIC_STATIC_ACCESS_BUILDER(                          \
44                                                                               \
45         NAME,                                                                 \
46         SYMMETRIC_TYPE,                                                       \
47         LEFT_BODY,                                                            \
48         RIGHT_BODY                                                            \
49     )                                                                         \
50                                                                               \
51     template                                                                  \
52     <                                                                         \
53         class Tag,                                                            \
54         class SYMMETRIC_TYPE,                                                 \
55         class Enable = void                                                   \
56     >                                                                         \
57     struct NAME                                                               \
58     {                                                                         \
59         BOOST_BIMAP_STATIC_ERROR(                                             \
60             BOOST_PP_CAT(NAME,_FAILURE),                                      \
61             (SYMMETRIC_TYPE,Tag)                                              \
62         );                                                                    \
63     };                                                                        \
64                                                                               \
65     template< class Tag, class SYMMETRIC_TYPE >                               \
66     struct NAME                                                               \
67     <                                                                         \
68         Tag, SYMMETRIC_TYPE,                                                  \
69         BOOST_DEDUCED_TYPENAME enable_if                                      \
70         <                                                                     \
71             ::boost::bimaps::relation::support::is_tag_of_member_at_left      \
72             <                                                                 \
73                 Tag,                                                          \
74                 SYMMETRIC_TYPE                                                \
75             >                                                                 \
76                                                                               \
77         >::type                                                               \
78     >                                                                         \
79     {                                                                         \
80         LEFT_BODY;                                                            \
81     };                                                                        \
82                                                                               \
83     template< class Tag, class SYMMETRIC_TYPE >                               \
84     struct NAME                                                               \
85     <                                                                         \
86         Tag, SYMMETRIC_TYPE,                                                  \
87         BOOST_DEDUCED_TYPENAME enable_if                                      \
88         <                                                                     \
89             ::boost::bimaps::relation::support::is_tag_of_member_at_right     \
90             <                                                                 \
91                 Tag,                                                          \
92                 SYMMETRIC_TYPE                                                \
93             >                                                                 \
94                                                                               \
95         >::type                                                               \
96     >                                                                         \
97     {                                                                         \
98         RIGHT_BODY;                                                           \
99     };
100 /*===========================================================================*/
101
102
103 #endif // BOOST_BIMAP_RELATION_DETAIL_STATIC_ACCES_BUILDER_HPP
104
105