
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@sig.com 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.