Boost logo

Boost :

Subject: Re: [boost] [type traits] add a set of templates to propagate constetc from one type to another?
From: Jeffrey Hellrung (jhellrung_at_[hidden])
Date: 2010-03-03 11:50:41


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.

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_const< int, const float >::type -> const float
copy_const< int, const float >::type -> float (???)

- Jeff


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