//[no_oldof_macro template class vector { public: void push_back(T const& value, boost::contract::virtual_* v = 0) // Program old-value without macros (pass extra `v` if virtual). boost::contract::old_ptr old_size = boost::contract::make_old( boost::contract::copy_old() ? size() : boost::contract::null_old() ); boost::contract::guard c = boost::contract::public_function(this) .postcondition([&] { BOOST_CONTRACT_ASSERT(size() == *old_size + 1); }) ; vect_.push_back(id); // Function body. } /* ... */ //] void invariant() const { BOOST_CONTRACT_ASSERT(size() >= 0); } private: std::vector vect_; }; //[no_virtual_oldof_macro class identifiers { public: virtual void push_back(int id, boost::contract::virtual_* v = 0) // Program old-value without macros but with extra `v`. boost::contract::old_ptr old_size = boost::contract::make_old(v, boost::contract::copy_old(v) ? size() : boost::contract::null_old() ); boost::contract::guard c = boost::contract::public_function(this) .postcondition([&] { BOOST_CONTRACT_ASSERT(size() == *old_size + 1); }) ; vect_.push_back(id); // Function body. } /* ... */ //] void invariant() const { BOOST_CONTRACT_ASSERT(size() >= 0); } private: std::vector vect_; }; //[no_base_types_macro #include class multi_identifiers : private boost::contract::constructor_precondition, public identifiers, public virtual pushable, protected sizer, private capacitor { public: // Program `base_types` without macros (list only public bases). typedef boost::mpl::vector base_types; /* ... */ //] };