// Boost.Bimap | |
// | |
// Copyright (c) 2006-2007 Matias Capeletto | |
// | |
// Distributed under the Boost Software License, Version 1.0. | |
// (See accompanying file LICENSE_1_0.txt or copy at | |
// http://www.boost.org/LICENSE_1_0.txt) | |
#ifndef BOOST_BIMAP_DETAIL_CHECK_METADATA_HPP | |
#define BOOST_BIMAP_DETAIL_CHECK_METADATA_HPP | |
#if defined(_MSC_VER) && (_MSC_VER>=1200) | |
#pragma once | |
#endif | |
#include <boost/config.hpp> | |
#include <boost/mpl/assert.hpp> | |
#include <boost/type_traits/is_same.hpp> | |
#include <boost/preprocessor/cat.hpp> | |
// Easier way to call BOOST_MPL_ASSERT_MSG in class scope | |
/*===========================================================================*/ | |
#define BOOST_BIMAP_MPL_ASSERT_MSG_ACS(p1,p2,p3) \ | |
\ | |
struct p2 {}; \ | |
BOOST_MPL_ASSERT_MSG(p1,p2,p3); \ | |
/*===========================================================================*/ | |
// Build a descriptive name. | |
/*===========================================================================*/ | |
#define BOOST_BIMAP_WRONG_METADATA_MESSAGE( \ | |
\ | |
P_CLASS, \ | |
P_NAME, \ | |
P_CORRECT_TYPE \ | |
\ | |
) \ | |
\ | |
BOOST_PP_CAT \ | |
( \ | |
WRONG_METADATA__, \ | |
BOOST_PP_CAT \ | |
( \ | |
P_CLASS, \ | |
BOOST_PP_CAT \ | |
( \ | |
__AT__, \ | |
BOOST_PP_CAT \ | |
( \ | |
P_NAME, \ | |
BOOST_PP_CAT \ | |
( \ | |
__IS_DIFERENT_TO__, \ | |
P_CORRECT_TYPE \ | |
) \ | |
) \ | |
) \ | |
) \ | |
) | |
/*===========================================================================*/ | |
// Check if the metadata have the correct type, and if not inform | |
// it with a useful compile time message. | |
/*===========================================================================*/ | |
#define BOOST_BIMAP_CHECK_METADATA( \ | |
\ | |
P_CLASS, \ | |
P_NAME, \ | |
P_CORRECT_TYPE \ | |
\ | |
) \ | |
\ | |
BOOST_BIMAP_MPL_ASSERT_MSG_ACS \ | |
( \ | |
( \ | |
::boost::is_same \ | |
< \ | |
P_CLASS::P_NAME, \ | |
P_CORRECT_TYPE \ | |
\ | |
>::value \ | |
), \ | |
BOOST_BIMAP_WRONG_METADATA_MESSAGE \ | |
( \ | |
P_CLASS, \ | |
P_NAME, \ | |
P_CORRECT_TYPE \ | |
), \ | |
(P_CLASS::P_NAME,P_CORRECT_TYPE) \ | |
) | |
/*===========================================================================*/ | |
// Just for autodocumment the test code | |
/*===========================================================================*/ | |
#define BOOST_BIMAP_TEST_STATIC_FUNCTION(NAME) \ | |
namespace NAME | |
/*===========================================================================*/ | |
// Just for autodocument the test code | |
/*===========================================================================*/ | |
#define BOOST_BIMAP_CALL_TEST_STATIC_FUNCTION(NAME) | |
/*===========================================================================*/ | |
#endif // BOOST_BIMAP_DETAIL_CHECK_METADATA_HPP | |