https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79328
Bug ID: 79328 Summary: Wshadow and lambda captures Product: gcc Version: 7.0 Status: UNCONFIRMED Severity: enhancement Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: nathan at gcc dot gnu.org Target Milestone: --- Created attachment 40647 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=40647&action=edit example -Wshadow warnings have a confusing interaction with lambda captures. 1) The names of init lambda captures are not checked. 2) local names are checked regardless of whether there is a default capture to make an outer object accessible The original report also mentioned the following case: T x; [=, x = std::move(x)] {}; if T is a non-copyable type, the default = capture couldn't capture it. IMHO such nuance shouldn't affect whether or not this gives a warning (so it should warn). I think it clear that #1 should be checked, but I can see arguments for and against #2. I think of name hiding as (almost) a syntactic check, and whether an object can be captured is more of a semantic check.