12ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
22ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#ifndef BOOST_MPL_ASSERT_HPP_INCLUDED
32ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#define BOOST_MPL_ASSERT_HPP_INCLUDED
42ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
52ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// Copyright Aleksey Gurtovoy 2000-2006
62ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh//
72ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// Distributed under the Boost Software License, Version 1.0.
82ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// (See accompanying file LICENSE_1_0.txt or copy at
92ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// http://www.boost.org/LICENSE_1_0.txt)
102ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh//
112ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// See http://www.boost.org/libs/mpl for documentation.
122ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
132ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// $Id: assert.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
142ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $
152ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// $Revision: 49267 $
162ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
172ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#include <boost/mpl/not.hpp>
182ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#include <boost/mpl/aux_/value_wknd.hpp>
192ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#include <boost/mpl/aux_/nested_type_wknd.hpp>
202ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#include <boost/mpl/aux_/yes_no.hpp>
212ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#include <boost/mpl/aux_/na.hpp>
222ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#include <boost/mpl/aux_/adl_barrier.hpp>
232ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
242ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#include <boost/mpl/aux_/config/nttp.hpp>
252ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#include <boost/mpl/aux_/config/dtp.hpp>
262ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#include <boost/mpl/aux_/config/gcc.hpp>
272ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#include <boost/mpl/aux_/config/msvc.hpp>
282ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#include <boost/mpl/aux_/config/static_constant.hpp>
292ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#include <boost/mpl/aux_/config/pp_counter.hpp>
302ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#include <boost/mpl/aux_/config/workaround.hpp>
312ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
322ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#include <boost/preprocessor/cat.hpp>
332ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
342ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#include <boost/config.hpp> // make sure 'size_t' is placed into 'std'
352ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#include <cstddef>
362ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
372ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
382ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \
392ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh    || (BOOST_MPL_CFG_GCC != 0) \
402ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh    || BOOST_WORKAROUND(__IBMCPP__, <= 600)
412ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#   define BOOST_MPL_CFG_ASSERT_USE_RELATION_NAMES
422ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#endif
432ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
442ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#if BOOST_WORKAROUND(__MWERKS__, < 0x3202) \
452ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh    || BOOST_WORKAROUND(__EDG_VERSION__, <= 238) \
462ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh    || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \
472ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh    || BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
482ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#   define BOOST_MPL_CFG_ASSERT_BROKEN_POINTER_TO_POINTER_TO_MEMBER
492ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#endif
502ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
512ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// agurt, 10/nov/06: use enums for Borland (which cannot cope with static constants)
522ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// and GCC (which issues "unused variable" warnings when static constants are used
532ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// at a function scope)
542ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \
552ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh    || (BOOST_MPL_CFG_GCC != 0)
562ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#   define BOOST_MPL_AUX_ASSERT_CONSTANT(T, expr) enum { expr }
572ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#else
582ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#   define BOOST_MPL_AUX_ASSERT_CONSTANT(T, expr) BOOST_STATIC_CONSTANT(T, expr)
592ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#endif
602ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
612ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
622ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew HsiehBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_OPEN
632ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
642ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehstruct failed {};
652ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
662ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// agurt, 24/aug/04: MSVC 7.1 workaround here and below: return/accept
672ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// 'assert<false>' by reference; can't apply it unconditionally -- apparently it
682ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// degrades the quality of GCC diagnostics
692ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#if BOOST_WORKAROUND(BOOST_MSVC, == 1310)
702ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#   define AUX778076_ASSERT_ARG(x) x&
712ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#else
722ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#   define AUX778076_ASSERT_ARG(x) x
732ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#endif
742ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
752ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehtemplate< bool C >  struct assert        { typedef void* type; };
762ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehtemplate<>          struct assert<false> { typedef AUX778076_ASSERT_ARG(assert) type; };
772ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
782ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehtemplate< bool C >
792ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehint assertion_failed( typename assert<C>::type );
802ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
812ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehtemplate< bool C >
822ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehstruct assertion
832ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh{
842ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh    static int failed( assert<false> );
852ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh};
862ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
872ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehtemplate<>
882ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehstruct assertion<true>
892ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh{
902ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh    static int failed( void* );
912ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh};
922ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
932ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehstruct assert_
942ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh{
952ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#if !defined(BOOST_MPL_CFG_NO_DEFAULT_PARAMETERS_IN_NESTED_TEMPLATES)
962ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh    template< typename T1, typename T2 = na, typename T3 = na, typename T4 = na > struct types {};
972ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#endif
982ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh    static assert_ const arg;
992ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh    enum relations { equal = 1, not_equal, greater, greater_equal, less, less_equal };
1002ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh};
1012ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
1022ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
1032ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#if !defined(BOOST_MPL_CFG_ASSERT_USE_RELATION_NAMES)
1042ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
1052ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehbool operator==( failed, failed );
1062ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehbool operator!=( failed, failed );
1072ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehbool operator>( failed, failed );
1082ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehbool operator>=( failed, failed );
1092ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehbool operator<( failed, failed );
1102ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehbool operator<=( failed, failed );
1112ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
1122ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#if defined(__EDG_VERSION__)
1132ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehtemplate< bool (*)(failed, failed), long x, long y > struct assert_relation {};
1142ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#   define BOOST_MPL_AUX_ASSERT_RELATION(x, y, r) assert_relation<r,x,y>
1152ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#else
1162ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehtemplate< BOOST_MPL_AUX_NTTP_DECL(long, x), BOOST_MPL_AUX_NTTP_DECL(long, y), bool (*)(failed, failed) >
1172ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehstruct assert_relation {};
1182ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#   define BOOST_MPL_AUX_ASSERT_RELATION(x, y, r) assert_relation<x,y,r>
1192ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#endif
1202ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
1212ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#else // BOOST_MPL_CFG_ASSERT_USE_RELATION_NAMES
1222ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
1232ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehboost::mpl::aux::weighted_tag<1>::type operator==( assert_, assert_ );
1242ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehboost::mpl::aux::weighted_tag<2>::type operator!=( assert_, assert_ );
1252ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehboost::mpl::aux::weighted_tag<3>::type operator>(  assert_, assert_ );
1262ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehboost::mpl::aux::weighted_tag<4>::type operator>=( assert_, assert_ );
1272ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehboost::mpl::aux::weighted_tag<5>::type operator<( assert_, assert_ );
1282ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehboost::mpl::aux::weighted_tag<6>::type operator<=( assert_, assert_ );
1292ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
1302ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehtemplate< assert_::relations r, long x, long y > struct assert_relation {};
1312ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
1322ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#endif
1332ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
1342ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
1352ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#if !defined(BOOST_MPL_CFG_ASSERT_BROKEN_POINTER_TO_POINTER_TO_MEMBER)
1362ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
1372ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehtemplate< bool > struct assert_arg_pred_impl { typedef int type; };
1382ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehtemplate<> struct assert_arg_pred_impl<true> { typedef void* type; };
1392ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
1402ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehtemplate< typename P > struct assert_arg_pred
1412ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh{
1422ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh    typedef typename P::type p_type;
1432ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh    typedef typename assert_arg_pred_impl< p_type::value >::type type;
1442ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh};
1452ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
1462ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehtemplate< typename P > struct assert_arg_pred_not
1472ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh{
1482ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh    typedef typename P::type p_type;
1492ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh    BOOST_MPL_AUX_ASSERT_CONSTANT( bool, p = !p_type::value );
1502ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh    typedef typename assert_arg_pred_impl<p>::type type;
1512ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh};
1522ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
1532ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehtemplate< typename Pred >
1542ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehfailed ************ (Pred::************
1552ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh      assert_arg( void (*)(Pred), typename assert_arg_pred<Pred>::type )
1562ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh    );
1572ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
1582ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehtemplate< typename Pred >
1592ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehfailed ************ (boost::mpl::not_<Pred>::************
1602ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh      assert_not_arg( void (*)(Pred), typename assert_arg_pred_not<Pred>::type )
1612ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh    );
1622ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
1632ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehtemplate< typename Pred >
1642ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew HsiehAUX778076_ASSERT_ARG(assert<false>)
1652ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehassert_arg( void (*)(Pred), typename assert_arg_pred_not<Pred>::type );
1662ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
1672ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehtemplate< typename Pred >
1682ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew HsiehAUX778076_ASSERT_ARG(assert<false>)
1692ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehassert_not_arg( void (*)(Pred), typename assert_arg_pred<Pred>::type );
1702ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
1712ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
1722ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#else // BOOST_MPL_CFG_ASSERT_BROKEN_POINTER_TO_POINTER_TO_MEMBER
1732ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
1742ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehtemplate< bool c, typename Pred > struct assert_arg_type_impl
1752ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh{
1762ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh    typedef failed      ************ Pred::* mwcw83_wknd;
1772ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh    typedef mwcw83_wknd ************* type;
1782ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh};
1792ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
1802ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehtemplate< typename Pred > struct assert_arg_type_impl<true,Pred>
1812ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh{
1822ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh    typedef AUX778076_ASSERT_ARG(assert<false>) type;
1832ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh};
1842ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
1852ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehtemplate< typename Pred > struct assert_arg_type
1862ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh    : assert_arg_type_impl< BOOST_MPL_AUX_VALUE_WKND(BOOST_MPL_AUX_NESTED_TYPE_WKND(Pred))::value, Pred >
1872ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh{
1882ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh};
1892ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
1902ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehtemplate< typename Pred >
1912ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehtypename assert_arg_type<Pred>::type
1922ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehassert_arg(void (*)(Pred), int);
1932ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
1942ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehtemplate< typename Pred >
1952ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehtypename assert_arg_type< boost::mpl::not_<Pred> >::type
1962ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehassert_not_arg(void (*)(Pred), int);
1972ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
1982ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#   if !defined(BOOST_MPL_CFG_ASSERT_USE_RELATION_NAMES)
1992ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehtemplate< long x, long y, bool (*r)(failed, failed) >
2002ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehtypename assert_arg_type_impl< false,BOOST_MPL_AUX_ASSERT_RELATION(x,y,r) >::type
2012ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehassert_rel_arg( BOOST_MPL_AUX_ASSERT_RELATION(x,y,r) );
2022ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#   else
2032ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehtemplate< assert_::relations r, long x, long y >
2042ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehtypename assert_arg_type_impl< false,assert_relation<r,x,y> >::type
2052ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehassert_rel_arg( assert_relation<r,x,y> );
2062ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#   endif
2072ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
2082ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#endif // BOOST_MPL_CFG_ASSERT_BROKEN_POINTER_TO_POINTER_TO_MEMBER
2092ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
2102ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#undef AUX778076_ASSERT_ARG
2112ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
2122ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew HsiehBOOST_MPL_AUX_ADL_BARRIER_NAMESPACE_CLOSE
2132ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
2142ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
2152ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// BOOST_MPL_ASSERT((pred<x,...>))
2162ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
2172ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#define BOOST_MPL_ASSERT(pred) \
2182ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew HsiehBOOST_MPL_AUX_ASSERT_CONSTANT( \
2192ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh      std::size_t \
2202ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh    , BOOST_PP_CAT(mpl_assertion_in_line_,BOOST_MPL_AUX_PP_COUNTER()) = sizeof( \
2212ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh          boost::mpl::assertion_failed<false>( \
2222ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh              boost::mpl::assert_arg( (void (*) pred)0, 1 ) \
2232ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh            ) \
2242ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh        ) \
2252ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh    ) \
2262ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh/**/
2272ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
2282ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// BOOST_MPL_ASSERT_NOT((pred<x,...>))
2292ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
2302ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
2312ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#   define BOOST_MPL_ASSERT_NOT(pred) \
2322ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehenum { \
2332ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh      BOOST_PP_CAT(mpl_assertion_in_line_,BOOST_MPL_AUX_PP_COUNTER()) = sizeof( \
2342ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh          boost::mpl::assertion<false>::failed( \
2352ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh              boost::mpl::assert_not_arg( (void (*) pred)0, 1 ) \
2362ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh            ) \
2372ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh        ) \
2382ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh}\
2392ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh/**/
2402ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#else
2412ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#   define BOOST_MPL_ASSERT_NOT(pred) \
2422ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew HsiehBOOST_MPL_AUX_ASSERT_CONSTANT( \
2432ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh      std::size_t \
2442ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh    , BOOST_PP_CAT(mpl_assertion_in_line_,BOOST_MPL_AUX_PP_COUNTER()) = sizeof( \
2452ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh          boost::mpl::assertion_failed<false>( \
2462ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh              boost::mpl::assert_not_arg( (void (*) pred)0, 1 ) \
2472ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh            ) \
2482ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh        ) \
2492ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh   ) \
2502ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh/**/
2512ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#endif
2522ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
2532ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// BOOST_MPL_ASSERT_RELATION(x, ==|!=|<=|<|>=|>, y)
2542ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
2552ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#if defined(BOOST_MPL_CFG_ASSERT_USE_RELATION_NAMES)
2562ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
2572ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#   if !defined(BOOST_MPL_CFG_ASSERT_BROKEN_POINTER_TO_POINTER_TO_MEMBER)
2582ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// agurt, 9/nov/06: 'enum' below is a workaround for gcc 4.0.4/4.1.1 bugs #29522 and #29518
2592ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#   define BOOST_MPL_ASSERT_RELATION_IMPL(counter, x, rel, y)      \
2602ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehenum { BOOST_PP_CAT(mpl_assert_rel_value,counter) = (x rel y) }; \
2612ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew HsiehBOOST_MPL_AUX_ASSERT_CONSTANT( \
2622ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh      std::size_t \
2632ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh    , BOOST_PP_CAT(mpl_assertion_in_line_,counter) = sizeof( \
2642ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh        boost::mpl::assertion_failed<BOOST_PP_CAT(mpl_assert_rel_value,counter)>( \
2652ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh            (boost::mpl::failed ************ ( boost::mpl::assert_relation< \
2662ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh                  boost::mpl::assert_::relations( sizeof( \
2672ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh                      boost::mpl::assert_::arg rel boost::mpl::assert_::arg \
2682ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh                    ) ) \
2692ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh                , x \
2702ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh                , y \
2712ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh                >::************)) 0 ) \
2722ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh        ) \
2732ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh    ) \
2742ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh/**/
2752ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#   else
2762ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#   define BOOST_MPL_ASSERT_RELATION_IMPL(counter, x, rel, y)    \
2772ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew HsiehBOOST_MPL_AUX_ASSERT_CONSTANT( \
2782ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh      std::size_t \
2792ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh    , BOOST_PP_CAT(mpl_assert_rel,counter) = sizeof( \
2802ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh          boost::mpl::assert_::arg rel boost::mpl::assert_::arg \
2812ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh        ) \
2822ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh    ); \
2832ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew HsiehBOOST_MPL_AUX_ASSERT_CONSTANT( bool, BOOST_PP_CAT(mpl_assert_rel_value,counter) = (x rel y) ); \
2842ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew HsiehBOOST_MPL_AUX_ASSERT_CONSTANT( \
2852ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh      std::size_t \
2862ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh    , BOOST_PP_CAT(mpl_assertion_in_line_,counter) = sizeof( \
2872ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh        boost::mpl::assertion_failed<BOOST_PP_CAT(mpl_assert_rel_value,counter)>( \
2882ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh              boost::mpl::assert_rel_arg( boost::mpl::assert_relation< \
2892ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh                  boost::mpl::assert_::relations(BOOST_PP_CAT(mpl_assert_rel,counter)) \
2902ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh                , x \
2912ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh                , y \
2922ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh                >() ) \
2932ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh            ) \
2942ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh        ) \
2952ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh    ) \
2962ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh/**/
2972ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#   endif
2982ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
2992ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#   define BOOST_MPL_ASSERT_RELATION(x, rel, y) \
3002ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew HsiehBOOST_MPL_ASSERT_RELATION_IMPL(BOOST_MPL_AUX_PP_COUNTER(), x, rel, y) \
3012ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh/**/
3022ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
3032ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#else // !BOOST_MPL_CFG_ASSERT_USE_RELATION_NAMES
3042ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
3052ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#   if defined(BOOST_MPL_CFG_ASSERT_BROKEN_POINTER_TO_POINTER_TO_MEMBER)
3062ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#   define BOOST_MPL_ASSERT_RELATION(x, rel, y) \
3072ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew HsiehBOOST_MPL_AUX_ASSERT_CONSTANT( \
3082ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh      std::size_t \
3092ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh    , BOOST_PP_CAT(mpl_assertion_in_line_,BOOST_MPL_AUX_PP_COUNTER()) = sizeof( \
3102ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh        boost::mpl::assertion_failed<(x rel y)>( boost::mpl::assert_rel_arg( \
3112ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh              boost::mpl::BOOST_MPL_AUX_ASSERT_RELATION(x,y,(&boost::mpl::operator rel))() \
3122ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh            ) ) \
3132ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh        ) \
3142ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh    ) \
3152ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh/**/
3162ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#   else
3172ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#   define BOOST_MPL_ASSERT_RELATION(x, rel, y) \
3182ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew HsiehBOOST_MPL_AUX_ASSERT_CONSTANT( \
3192ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh      std::size_t \
3202ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh    , BOOST_PP_CAT(mpl_assertion_in_line_,BOOST_MPL_AUX_PP_COUNTER()) = sizeof( \
3212ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh        boost::mpl::assertion_failed<(x rel y)>( (boost::mpl::failed ************ ( \
3222ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh            boost::mpl::BOOST_MPL_AUX_ASSERT_RELATION(x,y,(&boost::mpl::operator rel))::************))0 ) \
3232ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh        ) \
3242ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh    ) \
3252ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh/**/
3262ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#   endif
3272ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
3282ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#endif
3292ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
3302ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
3312ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh// BOOST_MPL_ASSERT_MSG( (pred<x,...>::value), USER_PROVIDED_MESSAGE, (types<x,...>) )
3322ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
3332ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3202))
3342ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#   define BOOST_MPL_ASSERT_MSG_IMPL( counter, c, msg, types_ ) \
3352ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehstruct msg; \
3362ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehtypedef struct BOOST_PP_CAT(msg,counter) : boost::mpl::assert_ \
3372ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh{ \
3382ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh    using boost::mpl::assert_::types; \
3392ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh    static boost::mpl::failed ************ (msg::************ assert_arg()) types_ \
3402ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh    { return 0; } \
3412ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh} BOOST_PP_CAT(mpl_assert_arg,counter); \
3422ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew HsiehBOOST_MPL_AUX_ASSERT_CONSTANT( \
3432ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh      std::size_t \
3442ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh    , BOOST_PP_CAT(mpl_assertion_in_line_,counter) = sizeof( \
3452ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh        boost::mpl::assertion<(c)>::failed( BOOST_PP_CAT(mpl_assert_arg,counter)::assert_arg() ) \
3462ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh        ) \
3472ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh    ) \
3482ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh/**/
3492ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#else
3502ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#   define BOOST_MPL_ASSERT_MSG_IMPL( counter, c, msg, types_ )  \
3512ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehstruct msg; \
3522ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsiehtypedef struct BOOST_PP_CAT(msg,counter) : boost::mpl::assert_ \
3532ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh{ \
3542ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh    static boost::mpl::failed ************ (msg::************ assert_arg()) types_ \
3552ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh    { return 0; } \
3562ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh} BOOST_PP_CAT(mpl_assert_arg,counter); \
3572ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew HsiehBOOST_MPL_AUX_ASSERT_CONSTANT( \
3582ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh      std::size_t \
3592ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh    , BOOST_PP_CAT(mpl_assertion_in_line_,counter) = sizeof( \
3602ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh        boost::mpl::assertion_failed<(c)>( BOOST_PP_CAT(mpl_assert_arg,counter)::assert_arg() ) \
3612ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh        ) \
3622ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh    ) \
3632ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh/**/
3642ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#endif
3652ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
3662ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#define BOOST_MPL_ASSERT_MSG( c, msg, types_ ) \
3672ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew HsiehBOOST_MPL_ASSERT_MSG_IMPL( BOOST_MPL_AUX_PP_COUNTER(), c, msg, types_ ) \
3682ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh/**/
3692ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh
3702ca0e41376e99ad53c02fdb5333339ad3dcad19fAndrew Hsieh#endif // BOOST_MPL_ASSERT_HPP_INCLUDED
371