You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Specific structure name can cause shadowing of globally defined lambda, causing "struct::operator()" to be called instead of "lambda::operator()" #134049
Defining structure with naming convention used by the compiler for lambda expressions ("$_<num>") causes compiler to use structure's "operator()" instead of the one defined for a global lambda(s).
In the following code:
struct $_0
{
int c;
voidoperator()() const {std::cout << __func__ << "" << c <<" from struct\n";}
};
auto lambda = [](){std::cout << __func__ << " from lambda\n";};
intmain()
{
lambda();
}
Call to "lambda()" invokes "$_0::operator()" instead of the expected lambda:
If the "$_0::operator()" makes use of any memory, then calls to lambdas result in memory access operations. "-fsanitize=address" allows for detection of them: godbolt example