cjdb added a comment. In D116203#3431612 <https://reviews.llvm.org/D116203#3431612>, @rjmccall wrote:
> In D116203#3430332 <https://reviews.llvm.org/D116203#3430332>, @aaron.ballman > wrote: > >> In D116203#3425512 <https://reviews.llvm.org/D116203#3425512>, @cjdb wrote: >> >>> I've noticed that libstdc++ has `using __remove_cv = typename >>> remove_cv<T>::type`, which causes Clang to chuck a wobbly. Changing from >>> `KEYWORD` to `TYPE_TRAIT_1` didn't seem to fix anything. >>> Is there a way we can work around this, or should we just rename >>> `__remove_cv` and friends to something else? >> >> You could work around it by taking note that you're in a libstdc++ system >> header and do a special dance, but because these are in the implementation's >> namespace, I think it's probably kinder for everyone to just pick a >> different name. I was hoping we could do something similar to `struct __remove_cv` which would issue a warning? >> If you wanted to be especially mean, you could go with `__remove_cvr`, but >> I'd suggest `__remove_cv_qualifiers` instead. However, what about `restrict` >> qualifiers? We support them in C++: https://godbolt.org/z/11EPefhjf > > Along with a fair number of other vendor qualifiers, yeah. I think you have > to make a policy decision about whether the intent of `std::remove_cv` is > really to just remove CV qualifiers or to produce an unqualified type (at the > outermost level). The former is probably more defensible, even if it makes > the transform less useful in the presence of extended qualifiers. I'm partial to `std::remove_cv` being faithful to its name, unless existing implementations do something else already. I don't mind adding support for the other stuff, but if there's more than just add/remove `restrict`, we're going to have a combinatorial explosion for removes. Is there an alternate way we can approach this? Possibly: template<class T> using remove_const_t = __remove_qualifiers(T, const); template<class T> using remove_reference_t = __remove_qualifiers(T, &, &&); template<class T> using remove_rcvref_t = __remove_qualifiers(T, const, volatile, restrict, &, &&); // rcv instead of cvr to prevent a typo with remove_cvref_t Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D116203/new/ https://reviews.llvm.org/D116203 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits