[PATCH] D56731: Add -Wimplicit-ctad warning to diagnose CTAD on types with no user defined deduction guides.
Arthur O'Dwyer via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Jan 15 15:38:13 PST 2019
Quuxplusone added a comment.
> Concretely, I think we could warn if, during template instantiation from a type-dependent initializer, we select the copy deduction candidate and there was another viable candidate (the `optional o(x)` case, the `tuple t{args...}` case, etc), maybe under a new `-Wctad-unwrap` or similar.
The trick is that you have to give the warning //even when the copy deduction candidate is not selected// — e.g. `tuple t{args...}` when `args...` is not a 1-parameter pack //right now// but if it might turn out to be a 1-parameter pack at "production time" (after the library has reached the customer).
> I don't see a good general way to catch and warn on bugs like `vector<string> v("foo", "bar")`
You mean `vector v("foo", "bar")`. Without CTAD — `vector<string> v("foo", "bar")` — there's no bug; the line of code simply doesn't compile, that's all. What CTAD adds is the possibility for the line to quietly //compile into the wrong thing//.
> (this problem isn't really specific to CTAD)
Maybe not, but it's certainly //correlated//, right?
> but we could certainly add some special-case heuristics to detect cases where a pair of string literals is passed to a constructor of a container-like type (for example, we could check whether the constructor looks like it can be called with arbitrary iterators as arguments, the class also has an `initializer_list<T>` constructor where a string literal can be implicitly converted to `T`, and the class has begin and end member functions).
For my own use-cases, I will continue to want a 100% comprehensive `-Wctad`. All these "heuristics" you're proposing seem very ad-hoc, and make a lot of work for the compiler vendor, and seem complicated enough that I would still worry about bugs slipping through the cracks. Whereas, if the user can simply 100% outlaw CTAD, then they don't ever have to worry.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D56731/new/
https://reviews.llvm.org/D56731
More information about the cfe-commits
mailing list