https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119239
Bug ID: 119239
Summary: GCC fail to reject odr-use of local constant in
template lambda without capture
Product: gcc
Version: 15.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: qurong at ios dot ac.cn
Target Milestone: ---
GCC incorrectly accept a lambda in a template context that implicitly odr-uses
a local constant variable without capture, while Clang properly rejects it
according to C++ standard requirements. The code works in all compilers only
when removed from template context.
For this program:
template<typename T>
void f() {
const int i = 42;
auto k = [] { // Error in Clang
return i; // Missing capture of 'i' in template context
}();
}
This causes an error in clang, but gcc didn't report the error.
Compiler Explorer link: https://godbolt.org/z/67T68WMhs