[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