ychen marked an inline comment as done. ychen added a comment. In D128750#3627085 <https://reviews.llvm.org/D128750#3627085>, @royjacobson wrote:
> I'm also a bit concerned that we're deviating from the standard here w.r.t. > to the 'reordering' checks for reversed candidates. I support this - I think > your version makes more sense than what the standard says to do here - but if > someone could check with the committee (I don't have reflector access myself) > that we're not breaking some important use case by doing it this way, I think > it's a good idea. I gave this more thought and think the current approach of using deduce order does not contradict the standardese. The reason is that there is only one way to reorder the function parameter lists of rewritten candidates because they are all binary operators. Hence "reorder" simply means "reverse". Also, https://eel.is/c++draft/temp.func.order#6.2.1.2.2 says "the function parameters that *positionally correspond* between the two templates are of the same type,". My understanding is that *positionally correspond* and *reverse* dictates that either zero or one reordering works, but not two or more. This is also based on the assumption that rewritten candidates can only have two operands, which I believe is true as of C++20, not sure about it in the future. For example, in template <typename> constexpr bool True = true; template <typename T> concept C = True<T>; template <typename T, typename U> struct X { }; template <C T, typename U, typename V> bool operator==(X<T, U>, V); template <C V, C U, typename T> bool operator==(T, X<U, V>); // rewritten candidate suppose reordering the rewritten candidate's template parameters list as the below works: template <C U, C V, typename T> bool operator==(X<U, V>, T); // rewritten candidate There is *no* way to reorder the template parameters list again (to get two or more reordering) and the resulted template still works, because of the *positionally correspond* requirement. If this reasoning is sound, I think the current approach of deducing order to compare constraints for rewritten candidates is correct. I wouldn't say I'm 100% confident. But it still makes sense to me at this moment. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D128750/new/ https://reviews.llvm.org/D128750 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits