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 is the documentation for a snapshot of the develop branch, built from commit c5994560ca.
PrevUpHomeNext

Function template constructor

boost::contract::constructor — Program contracts for constructors.

Synopsis

// In header: <boost/contract/constructor.hpp>


template<typename Class> 
  specify_old_postcondition_except constructor(Class * obj);

Description

This is used to specify postconditions, exception guarantees, old value copies at body, and check class invariants for constructors (see boost::contract::constructor_precondition to specify preconditions for constructors):

class u {
    friend class boost::contract:access;

    void invariant() const { // Optional (as for static and volatile).
        BOOST_CONTRACT_ASSERT(...);
        ...
    }

public:
    u(...) {
        boost::contract::old_ptr<old_type> old_var;
        boost::contract::check c = boost::contract::constructor(this)
            // No `.precondition` (use `constructor_precondition` instead).
            .old([&] { // Optional.
                old_var = BOOST_CONTRACT_OLDOF(old_expr);
                ...
            })
            .postcondition([&] { // Optional.
                BOOST_CONTRACT_ASSERT(...);
                ...
            })
            .except([&] { // Optional.
                BOOST_CONTRACT_ASSERT(...);
                ...
            })
        ;

        ... // Constructor body.
    }

    ...
};

For optimization, this can be omitted for constructors that do not have postconditions and exception guarantees, within classes that have no invariants.

See Also:

Constructors

Parameters:

obj

The object this from the scope of the enclosing constructor declaring the contract. (Constructors check all class invariants, including static and volatile invariants, see Class Invariants and Volatile Public Functions).

Template Parameters:

Class

The type of the class containing the constructor declaring the contract. (Usually this template parameter is automatically deduced by C++ and it does not need to be explicitly specified by programmers.)

Returns:

The result of this function must be assigned to a variable of type boost::contract::check declared explicitly (i.e., without using C++11 auto declarations) and locally just before the code of the constructor body (otherwise this library will generate a run-time error, see BOOST_CONTRACT_ON_MISSING_CHECK_DECL).


PrevUpHomeNext