
At Wed, 27 Oct 2010 19:36:37 -0400, Matt Calabrese wrote:
On Sun, Oct 17, 2010 at 10:27 PM, David Abrahams <dave@boostpro.com> wrote:
BTW, seems like you're close enough; it's probably time to integrate concept support for a future BCCL.
Okay, I've finished support for everything talked about up until this point (minus continue try, which is also now called auto try).
I also have some exciting news (well, exciting to me at least, though I may be jumping the gun). During development of the macro, I came up with a way to emulate concept-based template overloads, and it should be possible to integrate it into the macro, making for a possible, very powerful, BCCL 2. By this I mean being able to write, for instance, a function template that is overloaded for forward iterators and another that is overloaded for random access iterators, while making it unambiguous to call with an iterator that explicitly models the random access iterator concept -- I.E. the random access iterator version will be picked as a better match, much like what you'd use tag dispatching for now and what concept-based template overloads would have done in C++ with concepts.
No. Freakin'. Way! Dude, are you kidding me?! That is too amazing. Couple of questions: * What does an explicit concept map look like? You didn't show an example. * Can you do concept map templates (e.g. all vector<T>s model Container)? <snip all your other cool stuff> I love the "break if" thing, too :-)
which will static_assert when the condition is met, having the text of the condition in the static_assert message. Similar behavior would exist for (break not some_condition). As a use-case, the first "foo" template (the one with the switch) could have ( break not is_forward_iterator< It > ), which would trigger a static_assert if you try to call it with something that isn't an iterator at all.
Not (break if not is_forward_iterator<...>) ? ^^ -- Dave Abrahams BoostPro Computing http://www.boostpro.com