Extended Description
-Wunused-lambda-capture produces a false positive on lambdas that use captured variables within inactive branches of if constexpr.
$ ./bin/clang++ --version
clang version 11.0.0 ([email protected]:llvm/llvm-project.git cdce2fe)
...
$ cat /tmp/unused-lambda-capture-false-positive.cc
template
struct A {};
struct B {
template <typename T, bool flag>
void Top(T t, int n) {
auto lambda = [t, n, this](auto arg) {
if constexpr (flag) {
UndefinedFunction(t, n);
} else {
TopImpl<A>();
}
};
}
template
void TopImpl() {}
};
void Test(B* b) {
b->Top<int, false>(0, 0);
}
$ ./bin/clang++ -c -std=gnu++17 -Wunused-lambda-capture /tmp/unused-lambda-capture-false-positive.cc
/tmp/unused-lambda-capture-false-positive.cc:6:20: warning: lambda capture 't' is not used [-Wunused-lambda-capture]
auto lambda = [t, n, this](auto arg) {
^
/tmp/unused-lambda-capture-false-positive.cc:18:6: note: in instantiation of function template specialization 'B::Top<int, false>' requested here
b->Top<int, false>(0, 0);
^
/tmp/unused-lambda-capture-false-positive.cc:6:23: warning: lambda capture 'n' is not used [-Wunused-lambda-capture]
auto lambda = [t, n, this](auto arg) {
^
/tmp/unused-lambda-capture-false-positive.cc:6:26: warning: lambda capture 'this' is not used [-Wunused-lambda-capture]
auto lambda = [t, n, this](auto arg) {
^
3 warnings generated.
ANALYSIS
The false positive on this might be a dup of #36228 , however false positives on t and n seem diffirent.
Extended Description
-Wunused-lambda-capture produces a false positive on lambdas that use captured variables within inactive branches of
if constexpr.$ ./bin/clang++ --version
clang version 11.0.0 ([email protected]:llvm/llvm-project.git cdce2fe)
...
$ cat /tmp/unused-lambda-capture-false-positive.cc
template
struct A {};
struct B {
template <typename T, bool flag>
void Top(T t, int n) {
auto lambda = [t, n, this](auto arg) {
if constexpr (flag) {
UndefinedFunction(t, n);
} else {
TopImpl<A>();
}
};
}
template
void TopImpl() {}
};
void Test(B* b) {
b->Top<int, false>(0, 0);
}
$ ./bin/clang++ -c -std=gnu++17 -Wunused-lambda-capture /tmp/unused-lambda-capture-false-positive.cc
/tmp/unused-lambda-capture-false-positive.cc:6:20: warning: lambda capture 't' is not used [-Wunused-lambda-capture]
auto lambda = [t, n, this](auto arg) {
^
/tmp/unused-lambda-capture-false-positive.cc:18:6: note: in instantiation of function template specialization 'B::Top<int, false>' requested here
b->Top<int, false>(0, 0);
^
/tmp/unused-lambda-capture-false-positive.cc:6:23: warning: lambda capture 'n' is not used [-Wunused-lambda-capture]
auto lambda = [t, n, this](auto arg) {
^
/tmp/unused-lambda-capture-false-positive.cc:6:26: warning: lambda capture 'this' is not used [-Wunused-lambda-capture]
auto lambda = [t, n, this](auto arg) {
^
3 warnings generated.
ANALYSIS
The false positive on
thismight be a dup of #36228 , however false positives ontandnseem diffirent.