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 /// \file relation/support/is_tag_of_member_at.hpp 10 /// \brief is_tag_of_member_at<tag,relation> metafunction 11 12 #ifndef BOOST_BIMAP_RELATION_SUPPORT_IS_TAG_OF_MEMBER_AT_HPP 13 #define BOOST_BIMAP_RELATION_SUPPORT_IS_TAG_OF_MEMBER_AT_HPP 14 15 #if defined(_MSC_VER) 16 #pragma once 17 #endif 18 19 #include <boost/config.hpp> 20 21 #include <boost/bimap/relation/member_at.hpp> 22 #include <boost/type_traits/is_same.hpp> 23 24 #include <boost/mpl/bool.hpp> 25 #include <boost/utility/enable_if.hpp> 26 #include <boost/bimap/relation/support/member_with_tag.hpp> 27 28 /** \struct boost::bimaps::relation::support::is_tag_of_member_at_left 29 30 \brief Metafunction to test if a user tag is referring to the left member. 31 32 \code 33 34 template< class Tag, class Relation > 35 struct is_tag_of_member_at_left : {true_|false_} {}; 36 37 \endcode 38 39 This metafunction is somewhat redundant with member_with_tag, but it is included 40 because it is a lot easier to metaprogram with it. The result type is the 41 same that: 42 43 \code 44 45 is_same< member_with_tag<Tag,Relation>::type , member_at::left >::type 46 47 \endcode 48 49 See also member_with_tag, member_at, is_tag_of_member_at_right. 50 \ingroup relation_group 51 **/ 52 53 54 /** \struct boost::bimaps::relation::support::is_tag_of_member_at_right 55 56 \brief Metafunction to test if a user tag is referring to the left member. 57 58 \code 59 60 template< class Tag, class Relation > 61 struct is_tag_of_member_at_right : {true_|false_} {}; 62 63 \endcode 64 65 This metafunction is somewhat redundat with member_with_tag, but it is included 66 because it is a lot easier to metaprogram with it. The result type is the 67 same that: 68 69 \code 70 71 is_same< member_with_tag<Tag,Relation>::type , member_at::right >::type 72 73 \endcode 74 75 See also member_with_tag, member_at, is_tag_of_member_at_left. 76 \ingroup relation_group 77 **/ 78 79 80 #ifndef BOOST_BIMAP_DOXYGEN_WILL_NOT_PROCESS_THE_FOLLOWING_LINES 81 82 namespace boost { 83 namespace bimaps { 84 namespace relation { 85 namespace support { 86 87 // Metafunction is_tag_of_member_at_left 88 // Easiear metaprogramming 89 90 template 91 < 92 class Tag, 93 class Relation, 94 class Enable = void 95 > 96 struct is_tag_of_member_at_left : 97 ::boost::mpl::false_ {}; 98 99 template< class Tag, class Relation > 100 struct is_tag_of_member_at_left 101 < 102 Tag, Relation, 103 BOOST_DEDUCED_TYPENAME enable_if 104 < 105 is_same 106 < 107 BOOST_DEDUCED_TYPENAME member_with_tag<Tag,Relation>::type, 108 member_at::left 109 > 110 111 >::type 112 > : 113 ::boost::mpl::true_ {}; 114 115 // Metafunction is_tag_of_member_at_right 116 // Easiear metaprogramming 117 118 template 119 < 120 class Tag, 121 class Relation, 122 class Enable = void 123 > 124 struct is_tag_of_member_at_right : 125 ::boost::mpl::false_ {}; 126 127 template< class Tag, class Relation > 128 struct is_tag_of_member_at_right 129 < 130 Tag, Relation, 131 BOOST_DEDUCED_TYPENAME enable_if 132 < 133 is_same 134 < 135 BOOST_DEDUCED_TYPENAME member_with_tag<Tag,Relation>::type, 136 member_at::right 137 > 138 139 >::type 140 > : 141 ::boost::mpl::true_ {}; 142 143 144 // Metafunction is_tag_of_member_at_info 145 // Easiear metaprogramming 146 147 template 148 < 149 class Tag, 150 class Relation, 151 class Enable = void 152 > 153 struct is_tag_of_member_at_info : 154 ::boost::mpl::false_ {}; 155 156 template< class Tag, class Relation > 157 struct is_tag_of_member_at_info 158 < 159 Tag, Relation, 160 BOOST_DEDUCED_TYPENAME enable_if 161 < 162 is_same 163 < 164 BOOST_DEDUCED_TYPENAME member_with_tag<Tag,Relation>::type, 165 member_at::info 166 > 167 168 >::type 169 > : 170 ::boost::mpl::true_ {}; 171 172 } // namespace support 173 } // namespace relation 174 } // namespace bimaps 175 } // namespace boost 176 177 #endif // BOOST_BIMAP_DOXYGEN_WILL_NOT_PROCESS_THE_FOLLOWING_LINES 178 179 #endif // BOOST_BIMAP_RELATION_SUPPORT_IS_TAG_OF_MEMBER_AT_HPP 180 181 182