https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93842
Bug ID: 93842 Summary: generic lambda accesses a variable with with automatic storage duration that wasn't captured by the lambda expression Product: gcc Version: 10.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: kuzniar95 at o2 dot pl Target Milestone: --- The following code: -------------- int main() { constexpr char ch = '='; [](auto) { return ch; }; // NOT OK } -------------- g++ -Wunused -std=c++14 lambda.cpp produces: -------------- lambda.cpp: In function ‘int main()’: lambda.cpp:2:17: warning: variable ‘ch’ set but not used [-Wunused-but-set-variable] constexpr char ch = '='; -------------- I believe GCC is doubly wrong here, as this warning isn't right, because 'ch' is actually used, but primarily it shouldn't compile the code as: > If a lambda expression (or an instantiation of a generic lambda's function > call operator) ODR-uses this or any variable with automatic storage duration, > it must be captured by the lambda expression.