...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
This section contains notes on all releases of this library (from the latest to the oldest).
January 6, 2018 (Il Giorno della Befana)
First Boost release:
Released files are part of Boost.
September 2, 2017
Contracts without the macros:
override
,
final
, and new
(because override
can be programmed directly using C++11, while final
and new
are rarely
if ever used).
static_assert
emulation (because this can be programmed directly using C++11,
or using Boost.StaticAssert).
.except(...)
,
etc.).
call_if
and condition_if
(assertions requirements
were supported also by previous revisions of this library but they were
handled by internal code generated by the contract macros).
Released files.
Note | |
---|---|
This revision of the library passed Boost formal review and it was accepted into the Boost libraries (see https://groups.google.com/forum/?fromgroups=#!topic/boost-list/jQ7OjAmos_Y). |
August 20, 2012
Accepted into Boost:
CONTRACT_MEMBER_BODY(class_type, function_name)
to class_type::CONTRACT_MEMBER_BODY(function_name)
so the macro can also be used to declare
derived classes avoiding using the library syntax even when the base
class has contracts.
Released files.
June 4, 2012
Simplified syntax, added named parameters and concepts:
ConstantCopyConstructible
requirement just for the old value expression type (e.g., a vector might
not be copyable while its size always is because it is an integral type).
Removed the copyable
tag.
CONTRACT_CLASS
macro and removed the need to duplicate declaration elements (do not
repeat function declaration, do not repeat class name in function declaration,
etc).
_TPL
macros so
to reduce compile-time (instead of internally making all templates contract
functions so to use typename
freely).
Released files.
March 7, 2010
Support for most/all C++ constructs:
volatile
,
auto
, explicit
,
export
, extern
,
friend
, inline
,
struct
, and throw
(for exception specifications).
union
cannot
be contracted.
Released files.
February 21, 2010
Support for most/all contract programming features:
self
,
variable.now
, and variable.old
in writing contracts. Object this
and variables are now accessed as usual in member functions. CONTRACT_OLDOF(variable)
is used to access old values in postconditions.
(precondition)
, (postcondition)
,
and (body)
to specify contracts within the function
signature sequence. If no preconditions then (precondition)
({...})
is simply omitted from
the sequence (same for postconditions, body is mandatory instead). For
non-void functions, users can name the result argument with (postcondition) (result-name) ({...})
.
F
function type).
std::terminate()
).
(precondition)
,
(postcondition)
, and (body)
because Doxygen preprocessor is not capable to handle Boost.Preprocessor
sequences).
Released files.
November 21, 2009
Compiled on both GCC and MSVC:
()
.
Released files.
April 19, 2009
Cleaned-up first release:
Released files.