// Test old value skipped when operations to check them missing (e.g., `==`). #include #include #include #include #include #include #include #include #include #include unsigned equal_skips; template void push_back(std::vector& vect, T const& val) { boost::contract::guard c = boost::contract::function() .postcondition([&] { BOOST_CONTRACT_ASSERT( boost::contract::call_if >( boost::bind(std::equal_to(), boost::cref(vect.back()), boost::cref(val)) ).else_([] { ++equal_skips; return true; }) ); }) ; vect.push_back(val); } struct j { // Type without operator==. explicit j(int i) : j_(i) {} private: int j_; }; int main() { std::vector vi; equal_skips = 0; push_back(vi, 123); BOOST_TEST_EQ(equal_skips, 0); j jj(456); std::vector vj; equal_skips = 0; push_back(vj, jj); BOOST_TEST_EQ(equal_skips, 1); return boost::report_errors(); }