Boost
C++ Libraries
...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
This version of Boost is under active development. You are currently in the develop branch. The current version is 1.90.0.
boost::contract::public_function — Program contracts for non-void virtual public functions that do not override.
// In header: <boost/contract/public_function.hpp> template<typename VirtualResult, typename Class> specify_precondition_old_postcondition_except< VirtualResult > public_function(virtual_ * v, VirtualResult & r, Class * obj);
This is used to specify preconditions, postconditions, exception guarantees, old value copies at body, and check class invariants for public functions that are virtual, do not override, and do not return void:
class u { friend class boost::contract::access; void invariant() const { // Optional (as for static and volatile). BOOST_CONTRACT_ASSERT(...); ... } public: t f(..., boost::contract::virtual_* v = 0) { t result; boost::contract::old_ptr<old_type> old_var; boost::contract::check c = boost::contract::public_function( v, result, this) .precondition([&] { // Optional. BOOST_CONTRACT_ASSERT(...); ... }) .old([&] { // Optional. old_var = BOOST_CONTRACT_OLDOF(v, old_expr); ... }) .postcondition([&] (t const& result) { // Optional. BOOST_CONTRACT_ASSERT(...); ... }) .except([&] { // Optional. BOOST_CONTRACT_ASSERT(...); ... }) ; ... // Function body (use `return result = return_expr`). } ... };
A virtual public function should always call otherwise this library will not be able to correctly use it for subcontracting.boost::contract::public_function
See Also: Virtual Public Functions
Parameters: |
|
||||||
Template Parameters: |
|
||||||
Returns: |
The result of this function must be assigned to a variable of type |