royjacobson accepted this revision.
royjacobson added a comment.
This revision is now accepted and ready to land.

Some documentation/test nits, and one question, but otherwise LGTM.
Could you fix the merge conflict? It would be nice to see pre-commit CI results.

Given the complexity of the technical details here, as long as it doesn't 
unreasonably delay this, please wait for other people to also review it.



================
Comment at: clang/include/clang/AST/DeclTemplate.h:848-856
+
+    /// The set of "injected" template arguments used within this
+    /// class template.
+    ///
+    /// This pointer refers to the template arguments (there are as
+    /// many template arguments as template parameaters) for the class
+    /// template, and is allocated lazily, since most class templates do not
----------------



================
Comment at: clang/lib/Sema/SemaTemplateDeduction.cpp:5161-5163
 /// \param AllowOrderingByConstraints If \c is false, don't check whether one
 /// of the templates is more constrained than the other. Default is true.
 ///
----------------
update docs here


================
Comment at: clang/lib/Sema/SemaTemplateDeduction.cpp:5183
   if (!Better1 && !Better2) // Neither is better than the other
-    return JudgeByConstraints();
+    return nullptr;
+
----------------
Previously we continued to check by constraints, now we directly return 
`nullptr`, doesn't this mean we don't perform constraints checks that we've 
done before? Or was it a bug?


================
Comment at: clang/lib/Sema/SemaTemplateDeduction.cpp:5234
+  {
+    // C++20 [temp.func.order]p6.3:
+    //   Otherwise, if the context in which the partial ordering is done is
----------------
This comment should be moved down to the `if (TPOC == TPOC_Conversion &&` check.


================
Comment at: clang/test/CXX/temp/temp.decls/temp.fct/temp.func.order/p6.cpp:23
 
-template <typename T, typename U> struct X {};
-
 template <typename T, C U, typename V> bool operator==(X<T, U>, V) = delete;
+template <C U,        C V, C T>        bool operator==(X<U, V>, T);
----------------
This is an explicit example from the standard, so I don't like changing it so 
subtly. Could you revert the change and document we're deviating from the 
standard here?


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

Reply via email to