https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78850
Bug ID: 78850 Summary: Parameter of returned generic lambda allegedly shadows parameter of free function Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: daiw at gmx dot net Target Milestone: --- Compiling the following code template <typename X, typename F> auto apply(X x, F f) { return f(x); } template <typename Y> auto add_value(Y y) { return [y](auto x) { return x + y; }; } int main() { apply(1, add_value(2)); } with g++ (e.g. v. 5.4, but also newer ones) gives false shadow warnings: https://godbolt.org/g/MMJ51o $ g++ -Wshadow -Werror -std=c++14 shadow_test.cpp shadow_test.cpp: In instantiation of ‘add_value(Y)::<lambda(auto:1)> [with auto:1 = int; Y = int]’: shadow_test.cpp:4:13: required from ‘auto apply(X, F) [with X = int; F = add_value(Y) [with Y = int]::<lambda(auto:1)>]’ shadow_test.cpp:18:26: required from here shadow_test.cpp:10:22: error: declaration of ‘int x’ shadows a parameter [-Werror=shadow] return [y](auto x) ^ shadow_test.cpp:2:14: note: shadowed declaration is here auto apply(X x, F f) ^ cc1plus: all warnings being treated as errors Corresponding SO post: http://stackoverflow.com/questions/41208811/parameter-of-returned-generic-lambda-allegedly-shadows-parameter-of-free-functio