Boost logo

Boost :

Subject: [boost] [contract] assertion requirements as meta-functions or not?
From: lcaminiti (lorcaminiti_at_[hidden])
Date: 2012-04-24 08:31:42

Hello all,

Boost.Contract allows to specify "assertion requirements":

    /assertion-condition/, requires /assertion-requirement/

If the requirement is not met then the assertion condition is neither
compiled nor checked at run-time.

Question: Shall the assertion-requirement be a nullary boolean meta-function
or just a static boolean value?

For example:

    template( typename T ) requires( boost::LessThanComparable<T> )
    (T const&) (min) ( (T const&) x, (T const&) y )
            auto result = return,
            x < y ? result == x : result == y,
                    requires boost::has_equal_to<T>::value // static boolean
) {
    return x < y ? x : y; // OK: T is less than comparable `<`.

For now, the assertion requirement is a static boolean value so it can be
more easily manipulated (using !, &&, ||, etc instead of mpl::not, mpl::and,
mpl::or, etc). However, is there any strong reason for marking the assertion
requirement a nullary boolean meta-function instead like the following code?

            x < y ? result == x : result == y,
                    requires boost::has_equal_to<T> // meta-function


View this message in context:
Sent from the Boost - Dev mailing list archive at

Boost list run by bdawes at, gregod at, cpdaniel at, john at