Chris@16: // Boost.Bimap Chris@16: // Chris@16: // Copyright (c) 2006-2007 Matias Capeletto Chris@16: // Chris@16: // Distributed under the Boost Software License, Version 1.0. Chris@16: // (See accompanying file LICENSE_1_0.txt or copy at Chris@16: // http://www.boost.org/LICENSE_1_0.txt) Chris@16: Chris@16: /// \file relation/detail/metadata_access_builder.hpp Chris@16: /// \brief Define macros to help building metafunctions Chris@16: Chris@16: #ifndef BOOST_BIMAP_RELATION_DETAIL_METADATA_ACCESS_BUILDER_HPP Chris@16: #define BOOST_BIMAP_RELATION_DETAIL_METADATA_ACCESS_BUILDER_HPP Chris@16: Chris@101: #if defined(_MSC_VER) Chris@16: #pragma once Chris@16: #endif Chris@16: Chris@16: #include Chris@16: Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: Chris@16: Chris@16: /****************************************************************************** Chris@16: BIMAP SYMMETRIC METADATA ACCESS INTERFACE Chris@16: ******************************************************************************* Chris@16: Chris@16: template< class Tag, class SymmetricType > Chris@16: struct NAME Chris@16: { Chris@16: typedef -unspecified- type; Chris@16: }; Chris@16: Chris@16: ******************************************************************************/ Chris@16: Chris@16: Chris@16: /*===========================================================================*/ Chris@16: #define BOOST_BIMAP_SYMMETRIC_METADATA_ACCESS_BUILDER( \ Chris@16: \ Chris@16: NAME, \ Chris@16: METADATA_BY_LEFT, \ Chris@16: METADATA_BY_RIGHT \ Chris@16: ) \ Chris@16: \ Chris@16: template \ Chris@16: < \ Chris@16: class Tag, \ Chris@16: class SymmetricType, \ Chris@16: class Enable = void \ Chris@16: > \ Chris@16: struct NAME \ Chris@16: { \ Chris@16: BOOST_BIMAP_STATIC_ERROR( \ Chris@16: BOOST_PP_CAT(NAME,_FAILURE), \ Chris@16: (SymmetricType,Tag) \ Chris@16: ); \ Chris@16: }; \ Chris@16: \ Chris@16: template< class Tag, class SymmetricType > \ Chris@16: struct NAME \ Chris@16: < \ Chris@16: Tag, SymmetricType, \ Chris@16: BOOST_DEDUCED_TYPENAME enable_if \ Chris@16: < \ Chris@16: ::boost::bimaps::relation::support::is_tag_of_member_at_left \ Chris@16: < \ Chris@16: Tag, \ Chris@16: SymmetricType \ Chris@16: > \ Chris@16: \ Chris@16: >::type \ Chris@16: > \ Chris@16: { \ Chris@16: typedef BOOST_DEDUCED_TYPENAME SymmetricType::METADATA_BY_LEFT type; \ Chris@16: }; \ Chris@16: \ Chris@16: template< class Tag, class SymmetricType > \ Chris@16: struct NAME \ Chris@16: < \ Chris@16: Tag, SymmetricType, \ Chris@16: BOOST_DEDUCED_TYPENAME enable_if \ Chris@16: < \ Chris@16: ::boost::bimaps::relation::support::is_tag_of_member_at_right \ Chris@16: < \ Chris@16: Tag, \ Chris@16: SymmetricType \ Chris@16: > \ Chris@16: \ Chris@16: >::type \ Chris@16: > \ Chris@16: { \ Chris@16: typedef BOOST_DEDUCED_TYPENAME SymmetricType::METADATA_BY_RIGHT type; \ Chris@16: }; Chris@16: /*===========================================================================*/ Chris@16: Chris@16: Chris@16: #endif // BOOST_BIMAP_RELATION_DETAIL_METADATA_ACCES_BUILDER_HPP Chris@16: Chris@16: