rsmith added inline comments.

================
Comment at: clang/lib/Sema/SemaOverload.cpp:9438
   // FIXME: Pass in the explicit template arguments?
   ArgumentDependentLookup(Name, Loc, Args, Fns);
 
----------------
It would seem preferable to me to do the filtering in `ArgumentDependentLookup` 
itself rather than here (but I don't feel strongly about it).


================
Comment at: clang/lib/Sema/SemaOverload.cpp:9455-9459
+    // Functions in 'std::ranges' are hidden from ADL per [range.iter.ops]/2 
and
+    // [algorithms.requirements]/2.
+    if ((*I)->isInStdRangesNamespace() &&
+        Name.getNameKind() == DeclarationName::NameKind::Identifier)
+      continue;
----------------
I worry that this might break some stdlib implementation that finds helper 
functions via ADL in `std::ranges` somehow. Also, it seems desirable to make 
this opt-in for the stdlib implementation and indeed for end-user functions not 
in `std::ranges`.

Have you considered enabling this behavior with an attribute instead of by 
detecting whether the function is in `std::ranges`?


================
Comment at: clang/lib/Sema/SemaOverload.cpp:12837-12841
+  // Functions in 'std::ranges' inhibit ADL per [range.iter.ops]/2 and
+  // [algorithms.requirements]/2.
+  if (!ULE->decls().empty() && ULE->decls_begin()->isInStdRangesNamespace() &&
+      ULE->getName().getNameKind() == DeclarationName::NameKind::Identifier)
+    return;
----------------
What should happen if a `using` declaration names one of these things? Should 
we care about the properties of the underlying declaration (eg, whether the 
target of the using declaration is in this namespace / has the attribute), or 
about the found decl (eg, whether the `using` declaration itself is in the 
namespace / has the attribute)?

Depending on the answer, we may need to check all declarations in the 
`UnresolvedLookupExpr`, not only the first one. For example, we could have an 
overload set that contains both a user-declared function and a `using` 
declaration that names a function in `std::ranges` here.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D129951/new/

https://reviews.llvm.org/D129951

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
  • [PATCH] D129951: ... Christopher Di Bella via Phabricator via cfe-commits
    • [PATCH] D129... Christopher Di Bella via Phabricator via cfe-commits
    • [PATCH] D129... Christopher Di Bella via Phabricator via cfe-commits
    • [PATCH] D129... Christopher Di Bella via Phabricator via cfe-commits
    • [PATCH] D129... Christopher Di Bella via Phabricator via cfe-commits
    • [PATCH] D129... Richard Smith - zygoloid via Phabricator via cfe-commits
    • [PATCH] D129... Christopher Di Bella via Phabricator via cfe-commits

Reply via email to