Boost logo

Boost :

Subject: Re: [boost] [contract] syntax redesign
From: lcaminiti (lorcaminiti_at_[hidden])
Date: 2012-01-13 14:13:04

Dave Abrahams wrote
> on Sun Dec 11 2011, Lorenzo Caminiti <> wrote:
>> On Wed, Nov 9, 2011 at 6:16 AM, Lorenzo Caminiti &lt;lorcaminiti@&gt;
>> wrote:
>>>>> The goal here is to use Boost.Contract to /completely/ specify the
>>>>> interface for the positive abstract data type.
>> For whomever is curious, the Boost.Contract named and deduced
>> parameter examples now compile:
>> Here's an example that uses a bit of everything: Contracts, concepts,
>> named/deduced function and template parameters:
> (gulp) wow! That's _very_ impressive.
> It's just too bad the syntax is so intrusive on that of C++; it's like a
> whole new language to learn, debug, etc. There are a few contract

I wanted to see if and how Contract Programming could be implemented within
C++. That came to the (big) cost of:
1) The macro syntax (plus the cryptic pp/compiler errors it generates if you
miss something, these errors could be improved a bit but the issue is
systematic- the pp is just not capable of detecting syntax errors...).
2) Increased compilation time (x 30 !!!) (but if you disable contract
compilation you get ~ x 5 plus it /might/ be possible to improve the
implementation to reduce compilation time...).

Anyway, now we know just how much C++ macros can be abused ;)

> programming frameworks out there that are much less capable but at the
> same time don't intrude so much
> (e.g. which
> probably only builds on MSVC).

I looked at that before (in fact, I think I studied /all/ Contract
Programming work for C++ that was ever done, including A++!!). As far I
remember, that approach has a few major issues: No subcontracting and the
contracts are in the definitions (instead of declarations).

> I wonder if it's possible to make parts of this framework usable in the
> same way, so that people can approach it more gradually.

If anything, it'd be nice to have a front-end (external to C++) that
translates a syntax like the one of N1962 into my library macros. My library
syntax follows closely the one of N1962 (pp a part) so this shouldn't be too
bad to implement...


View this message in context:
Sent from the Boost - Dev mailing list archive at

Boost list run by bdawes at, gregod at, cpdaniel at, john at