Boost logo

Boost :

From: Dirk Gerrits (dirk_at_[hidden])
Date: 2003-03-09 15:41:56


Jaap Suter wrote:
> Hi,
>
> In my own meta-programming I tend to use a lot of static_asserts and concept
> checks. However, these do have a negative impact on my compile-times. Take,
> for example, a meta-function that takes a type-list as its parameter. Assume
> a pre-condition is that the list may not be empty. What I can do is:
>
> BOOST_STATIC_ASSERT( (mpl::not_< typename mpl::empty< List >::type
>
>>::type::value) );
>
>
> And while this is a good thing most of the time, sometimes I would like to
> disable these checks so my compiles go faster. What is the recommended way
> of doing this?
>
> 1. Using a define:
>
> #ifndef UID_DO_CHECKS
> BOOST_STATIC_ASSERT( (mpl::not_< typename mpl::empty< List >::type
>
>>::type::value) );
>
> #endif
>
> 2. Using a boolean trait or policy, that is passed to a meta-if statement:
>
> BOOST_STATIC_ASSERT( (
> mpl::apply_if< check_policy,
> mpl::not_< typename mpl::empty< List >::type >::type::value,
> true_ >::type::value ));
>
> 3. Other ideas?

I'd say something like:

#ifdef STATIC_NDEBUG
# define BOOST_STATIC_ASSERT2(e) BOOST_STATIC_ASSERT(e)
#else
# define BOOST_STATIC_ASSERT2(e) (void(e))
#endif

Analogous to <cassert>.

Regards,

Dirk Gerrits


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk