https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108026
Bug ID: 108026 Summary: Confusing pedwarn with template lambda with -std=c++11 Product: gcc Version: 13.0 Status: UNCONFIRMED Keywords: diagnostic Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: pinskia at gcc dot gnu.org Target Milestone: --- Take: ``` auto a = []<bool whitespace>() {}; ``` Compile with `-std=c++11 -pedantic`, we get currently: ``` <source>:1:12: warning: lambda templates are only available with '-std=c++14' or '-std=gnu++14' [-Wc++14-extensions] 1 | auto a = []<bool whitespace>() {}; | ^ ``` But change it to -std=c++14 we get: ``` <source>:1:12: warning: lambda templates are only available with '-std=c++20' or '-std=gnu++20' [-Wc++20-extensions] 1 | auto a = []<bool whitespace>() {}; | ^ ``` I am confused based on the warning/error message which is it? So I looked into the history of this code and pedwarn message and found that lamdba templates were proposed as part of the original paper about expanding lamdba for C++14, N3418 but they were removed by before the approval of C++14, N3559. And then finally in C++20 they were added back. Anyways the pedwarn message is just confusing and should be fixed.