[cfe-dev] Spurious warning about returning reference to lambda capture

Joseph Galbraith galb at vandyke.com
Wed Nov 20 15:38:26 PST 2013


Hi all,

I'm seeing what I think is a spurious warning from this code:

#include <string>

int
main(int argc, char**)
{
	std::wstring x;
	auto f = [x] () -> const std::wstring& { return x; };

	return 0;
}

The warning is:

stack_local.cpp:7:50: warning: reference to stack memory associated with 
local variable 'x' returned [-Wreturn-stack-address]
         auto f = [x] () -> const std::wstring& { return x; };

I think since x is actually a lambda capture, not a local variable, it 
is okay to return its address (so long as the caller finishes with the 
address before the lambda is destroyed).

(In my particular use case the lambda lifetime is tied to the callers
lifetime.)

Is my analysis correct?

If so, should we suppress this warning for lambda captures?

Thanks,

Joseph

PS. This is from:

cw01:~ galb$ clang++ --version
Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
Target: x86_64-apple-darwin13.0.0
Thread model: posix



More information about the cfe-dev mailing list