Simplified syntax, added named parameters and concepts - June 4, 2012
Pre-release
Pre-release
- Simplified syntax by reducing extra parenthesis to the bare necessary minimum (using some of the preprocessor parsing techniques originally introduced by Boost.LocalFunction).
- Postcondition old values only copy the old-of expression (e.g., copy just vector size instead of entire vector). This improves performance and introduces the 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.
- Body defined outside the macros (so compiler-errors for definitions retain their usual meaning).
- Added 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).
- Using _TPL macros so to reduce compile-time (instead of internally making all templates contract functions so to use typename freely).
- Overloading no longer requires unique parameter names.
- Added C++11-like virtual specifiers.
- Added constant assertions plus constant-expressions for select assertion if-conditions and for loop variants.
- Added named and deduced parameters.
- Added concept checking.
- Removed the interface to use the library without the macro (programmers were required to write too much boiler-plate code for the non-macro interface to be actually usable, plus supporting both the macro and non-macro interfaces limited what the macros could do).