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
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits