kadircet added inline comments.

================
Comment at: clang/lib/Sema/SemaCodeComplete.cpp:4135
+        !PotentialTemplateName.getAsIdentifierInfo()->getName().contains(
+            "function"))
+      return nullptr;
----------------
ilya-biryukov wrote:
> kadircet wrote:
> > This looks cheesy, do we really want to perform this operation only for 
> > templates with `"function"` in their names?
> > 
> > As discussed offline maybe perform this for any template with a 
> > single(non-defaulted?) argument, or maybe even better perform a type-check 
> > as suggested by you. But I believe there would be too many false positives 
> > with the current state.
> WDYT about `"function"` + only template with a single arg?
> FWIW, I think function in template arguments are very rare, so I'm more 
> optimistic about false-positives even in the current form.
> 
> We have an option of making it super-restrictive and only firing on 
> whitelisted things like `std::function`, `boost::function`, etc.
> But we don't have a mechanism to configure those from the outside, so that 
> will probably turn out too restrictive.
I don't think adding "function" as a restriction is helping much on reducing 
false positives. I would rather get rid of that check to increase usability.

The real problem is rather checking constructors to make sure there is at least 
one for which we can provide a callable with the signature we found. Anything 
else just seems cheesy and might result in people adding more and more cases 
over time.

It is up to you, I am OK if you choose to keep this restriction as well.


================
Comment at: clang/lib/Sema/SemaCodeComplete.cpp:4125
+    PotentialFunctionArg = &Specialization->getArg(0);
+  } else if (auto *Class = dyn_cast_or_null<ClassTemplateSpecializationDecl>(
+                 T->getAsCXXRecordDecl())) {
----------------
I thought you decided to get rid of this branch after the offline discussions, 
sorry for not mentioning in earlier revision.


================
Comment at: clang/lib/Sema/SemaCodeComplete.cpp:4142
+  // Handle other cases.
+  if (T->isPointerType())
+    T = T->getPointeeType();
----------------
what about referencetype?

```
void test();
void (&y)() = test;
```


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D62238



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to