
Le 24/04/12 14:31, lcaminiti a écrit :
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
Hi, I don't know if following the the _c suffix rule in Boost could help. x< y ? result == x : result == y, requires boost::has_equal_to<T> // meta-function and x< y ? result == x : result == y, requires*_c* boost::has_equal_to<T>::value // value Best, Vicente