Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

Front Page / Macros / Asserts / BOOST_MPL_ASSERT_RELATION

BOOST_MPL_ASSERT_RELATION

Synopsis

#define BOOST_MPL_ASSERT_RELATION( x, relation, y ) \
    unspecified token sequence \
/**/

Description

A specialized assertion macro for checking numerical conditions. Generates a compilation error when the condition ( x relation y ) doesn't hold.

Header

#include <boost/mpl/assert.hpp>

Parameters

Parameter Requirement Description
x An integral constant Left operand of the checked relation.
y An integral constant Right operand of the checked relation.
relation A C++ operator token An operator token for the relation being checked.

Expression semantics

For any integral constants x, y and a legal C++ operator token op:

BOOST_MPL_ASSERT_RELATION( x, op, y );
Return type:

None.

Semantics:

Generates a compilation error if ( x op y ) != true, otherwise has no effect.

When possible within the compiler's diagnostic capabilities, the error message will include a name of the relation being checked, the actual values of both operands, and have a general form of:

... ************...assert_relation<op, x, y>::************) ...

Example

template< typename T, typename U > struct my
{
    // ...
    BOOST_MPL_ASSERT_RELATION( sizeof(T), <, sizeof(U) );
};

my<char[50],char[10]> test;

// In instantiation of `my<char[50], char[10]>':
//   instantiated from here
// conversion from `
//   mpl_::failed************mpl_::assert_relation<less, 50, 10>::************'
//   to non-scalar type `mpl_::assert<false>' requested

See also

Asserts, BOOST_MPL_ASSERT, BOOST_MPL_ASSERT_NOT, BOOST_MPL_ASSERT_MSG