https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105571
Bug ID: 105571
Summary: Spurious "set but not used" on static constexpr local,
used in lambda
Product: gcc
Version: 12.1.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: cuzdav at gmail dot com
Target Milestone: ---
With -Wall, in every c++ language level on virtually every version of g++ as
far back as 4.9, g++ warns ("variable 'THIS_IS_USED' set but not used") on the
following complete code:
template <typename IterT, typename FuncT>
void for_each(IterT b, IterT e, FuncT f) {
while (b != e) {
f(*b++);
}
}
volatile int sink;
void xxx(int x) {
sink = x;
}
void foo() {
static constexpr auto THIS_IS_USED = 1;
int arr[10]{1,2,3,4,5,6,7,8,9,10};
for_each(arr, arr+10, [](auto v) {
xxx(THIS_IS_USED + v);
});
}
<source>: In function 'void foo()':
<source>:15:27: warning: variable 'THIS_IS_USED' set but not used
[-Wunused-but-set-variable]
15 | static constexpr auto THIS_IS_USED = 1;
| ^~~~~~~~~~~~
Compiler returned: 0
https://godbolt.org/z/b1s5Yqb3r
This appears to be related to the "auto" parameter in the lambda. Changing it
to 'int' makes the problem go away.