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:

CONTRACT_FUNCTION(
    template( typename T ) requires( boost::LessThanComparable<T> )
    (T const&) (min) ( (T const&) x, (T const&) y )
        postcondition(
            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

Thanks.
--Lorenzo

--
View this message in context: http://boost.2283326.n4.nabble.com/boost-contract-assertion-requirements-as-meta-functions-or-not-tp4583283p4583283.html
Sent from the Boost - Dev mailing list archive at Nabble.com.

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