
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