Boost logo

Boost :

Subject: Re: [boost] [type traits] add a set of templates to propagate constetc from one type to another?
From: Stewart, Robert (Robert.Stewart_at_[hidden])
Date: 2010-03-03 13:04:24


Jeffrey Hellrung wrote"
> Stewart, Robert wrote:
> > John Maddock wrote:
> >>> I too have needed and created propogate const (actually
> >>> propogate const
> >>> and/or volatile). I'd definitely appreciate such an addition to
> >>> Boost.TypeTraits.
> >> My gut feeling would be to call this "copy_cv" and it would
> >> do what it's name suggests, take a type and make it's
> >> cv-qualifiers the same as some other type.
> >
> > Nice name. The "cv" part is right on target, and "copy" is
> > short and clear.
> >
> > If one wants only const or volatile, one need only combine
> > copy_cv with remove_volatile or remove_const, so copy_const
> > and copy_volatile are not required. However, since there is
> > remove_const, remove_cv, and remove_volatile, wouldn't it be
> > less surprising to add copy_const, copy_cv, and copy_volatile?
>
> This depends on how you define copy_const. I've used it
> where it simply
> adds (and never removes) const and volatile qualifiers on the
> "To" type,
> so remove_volatile< copy_cv< From, To >::type >::type isn't
> the same as
> copy_const< From, To >::type when To is volatile-qualified.

Note that John wrote about making To have the same cv-qualification as From, above. Hence, he called it "copy_cv." Your example, which is perhaps what John meant, is to make sure that To has at least as much cv-qualification as From, without removing any extra To already had. That suggests "augment" or "append."

However, if From already is const, copying "const" from To to From won't make From any more const, so "copy" does capture the augmentation idea pretty well.

All that to say that I understand your point. The question is whether we need both forms. If so, then we need a way to distinguish the two.

> Also, I, too, use an implementation called "propagate_const" and
> "propagate_cv". To me, "propagate" seems to better evoke the pure
> addition of qualifiers, whereas "copy" *could* (to some
> people) mean the
> overwriting of qualifiers (at least more so than "propagate"):

"Propagate" is probably not a good choice because it doesn't quite imply the addition to existing state you mean, at least to me. Furthermore, "propagate" is frequently misspelled as "propogate." "Augment" seems a bit stilted, but it does capture the idea well. "Add" actually captures the idea pretty well, but we can't use that.

If we look at it from the other side, what John wrote above is about replacing From's cv-qualification with that of To, so "replace" works for that, which leaves "copy" for the augmenting form.

Therefore, copy_cv, copy_const, copy_volatile make From have at least To's cv-qualification, constness, or volatileness, respectively, while replace_cv, replace_const, and replace_volatile make From have To's cv-qualification, constness, or volatileness, respectively.

_____
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