Boost logo

Boost :

Subject: Re: [boost] review request: addition to type_traits library of has_operator_xxx
From: Stewart, Robert (Robert.Stewart_at_[hidden])
Date: 2010-11-17 15:26:27


Jeffrey Lee Hellrung, Jr. wrote:
> On 11/17/2010 6:58 AM, Stewart, Robert wrote:
> > Jeffrey Lee Hellrung, Jr. wrote:
> >>
> >> One thing that I've either found useful is to have an additional
> >> template parameter in addition to the parameter types and
> >> the return
> >> type, which is a Boost.MPL metapredicate intended to be
> >> applied to the actual result of the operation. The trait then
> >> evaluates to true only if the actual result type satisfies
> >> the given Boost.MPL metapredicate.
> >
> > Perhaps checking for convertible-to-return-type could be
> > the default predicate rather than adding another template parameter?
>
> How do you envision the interface then? Are you suggesting that the
> convertible-to-return-type type and the Boost.MPL metapredicate occupy
> the same template parameter?

Yes

> To be clear, I'm suggesting something like
>
> template< class T0, class T1 = T0, class Result = void,
> class ResultCond = boost::mpl::always< boost::true_type > >
> struct is_less_than_comparable;

I'm thinking something like this:

template
<
   class T
   , class U = T
   , class Pred = boost::type_traits::result_converts_to<void>
>
struct is_less_than_comparable;

boost::type_traits::result_converts_to<void> should inherit from boost::true_type, of course.

> It seems to me that, by far, the common case is checking
> convertibility to some given type, so I think it makes sense to make
> the common case syntactically simple.

is_less_than_comparable<int, int, bool> would become is_less_than_comparable<int, int, result_converts_to<bool> > which is more verbose but also more obvious and indicative of the additional power.

> If you want to avoid the extra template parameter, maybe you can wrap
> the predicate in something which could be detected in the Result
> template parameter, e.g.,

That would be ideal, but I'm not sure there's a satisfying means to do so without imposing too much on the acceptable predicates.

_____
Rob Stewart robert.stewart_at_[hidden]
Software Engineer, Core Software using std::disclaimer;
Susquehanna International Group, LLP http://www.sig.com

IMPORTANT: The information contained in this email and/or its attachments is confidential. If you are not the intended recipient, please notify the sender immediately by reply and immediately delete this message and all its attachments. Any review, use, reproduction, disclosure or dissemination of this message or any attachment by an unintended recipient is strictly prohibited. Neither this message nor any attachment is intended as or should be construed as an offer, solicitation or recommendation to buy or sell any security or other financial instrument. Neither the sender, his or her employer nor any of their respective affiliates makes any warranties as to the completeness or accuracy of any of the information contained herein or that this message or any of its attachments is free of viruses.


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk