|
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