GCC 4.5's -Wunused and -Wunused-parameter warnings don't understand that i and n being used in the function below:
#include <functional> std::function<int ()> foo(int i) { int n = 5; return [=]() { return i+n; }; } $ g++-4.5-20091112 -std=c++0x -Wall -Wextra -c lambda.cpp lambda.cpp: In function 'std::function<int()> foo(int)': lambda.cpp:5:8: warning: unused variable 'n' lambda.cpp: At global scope: lambda.cpp:3:23: warning: unused parameter 'i' Using optimizations doesn't seem to have an effect on this either way. Workaround: Adding i and n explicitly to the capture list causes GCC to understand that they are being used in this function. $ g++-4.5-20091112 -v Using built-in specs. COLLECT_GCC=/usr/local/bin/g++-4.5-20091112 COLLECT_LTO_WRAPPER=/usr/local/gcc-4.5-20091112/libexec/gcc/x86_64-unknown-linux-gnu/4.5.0/lto-wrapper Target: x86_64-unknown-linux-gnu Configured with: ../gcc-4.5-20091112/configure --prefix=/usr/local/gcc-4.5-20091112 --program-suffix=-4.5-20091112 --enable-languages=c,c++ Thread model: posix gcc version 4.5.0 20091112 (experimental) (GCC) -- Summary: C++0x lambda captures are not understood as used by - Wunused and -Wunused-parameter Product: gcc Version: 4.5.0 Status: UNCONFIRMED Severity: minor Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: lloyd at randombit dot net GCC build triplet: x86_64-unknown-linux-gnu GCC host triplet: x86_64-unknown-linux-gnu GCC target triplet: x86_64-unknown-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42066