rsmith added inline comments.
================ Comment at: test/SemaCXX/cxx1z-class-template-argument-deduction.cpp:360-361 + struct Type { + Typo(); // expected-error{{deduction guide must be declared in the same scope}} + // expected-error@-1{{deduction guide declaration without trailing return type}} + }; ---------------- aaron.ballman wrote: > Rakete1111 wrote: > > aaron.ballman wrote: > > > These errors are pretty unfortunate -- they don't really help the user to > > > understand what's gone wrong here. They're an improvement over the crash, > > > but I think we should try to make the errors more useful if we can. > > > > > > Why is `Typo()` being treated as a deduction guide? Perhaps we could look > > > to see if there is a `->` before making that determination? > > > Perhaps we could look to see if there is a -> before making that > > > determination? > > > > Yes that would be possible. The diagnostic would change for the following > > code: > > > > ``` > > template <typename> > > struct Foo {}; > > > > Foo();// -> Foo<int>; > > // currently: deduction guide missing -> > > // after: C++ requires type specifier for every declaration > > ``` > > > > Is that acceptable? Or I guess I could restrict this to partial deduction > > guides in classes. > I think the original diagnostic is better in that case. If you restrict to > partial deduction guides, do we get all the good diagnostics? I think the most likely intent in that case was to declare a constructor of `Foo`, and either it was accidentally written after the end of the class, or the in-class declaration got copy-pasted and the programmer forgot to fix it up. And moreso for a case such as ``` template <typename> struct Foo { Foo(); }; template<typename T> Foo() { // ... } ``` ... where we currently give three errors about deduction guides and no hint that a qualified name is required to define a constructor. I think it's comparatively unlikely that someone would forget the `->` in a deduction guide, given how central it is to the purpose of the declaration. So always disambiguating as a failed constructor rather than a failed deduction guide seems reasonable to me. Repository: rC Clang CHANGES SINCE LAST ACTION https://reviews.llvm.org/D57540/new/ https://reviews.llvm.org/D57540 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits