Subject: Re: [boost] [parameter] type predicates vs. concepts
From: Dave Abrahams (dave_at_[hidden])
Date: 2011-12-15 07:18:02
on Sun Dec 04 2011, Lorenzo Caminiti <lorcaminiti-AT-gmail.com> wrote:
> Hello all,
> What's the difference between using a Boost.Parameter type predicate
> and using a concept?
> I think parameter type predicates are unary metafunctions used to
> resolve the function call, concepts are asserted on the type after the
> call has been resolved... Is there more?
Overload ordering on concepts, but I see you're not talking about real
concepts, just BCCL concepts.
> Can I always do with type predicates what I can do with concepts?
No, type predicates are required not to cause a compilation error, so
there are limits to what they can detect in C++03 (e.g. copyability).
Concept checks are specifically used to cause compilation errors.
> Is there ever a reason to use/need both?
> For example here has_equal_to is the type predicate while
> DefautlConstructible is the concept. Could/should I have used
> has_[...]_default_constructor in and_ the type predicate instead of
> the DefaultConstructible concept?
I think unless the compiler has implemented a special intrinsic, in
C++03 has_[...]_default_constructor is at best an imperfect emulation.
-- Dave Abrahams BoostPro Computing http://www.boostpro.com
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk