https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64791
Bug ID: 64791
Summary: Generic lambda fails to implicitly capture `const`
variable
Product: gcc
Version: 4.9.2
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: tom at kera dot name
>From http://stackoverflow.com/q/28141403/560648
Reproduction:
/////////////////////////////
#include <iostream>
#include <functional>
int main()
{
const int a = 2;
std::function<void(int)> f = [&](auto b) { std::cout << a << ", " << b <<
std::endl; };
f(3);
}
/////////////////////////////
Taking any of the following steps allows the program to build and run with the
expected output "2, 3":
- remove `const` from declaration of a
- name `a` in the capture-list instead of relying on implicit capture
- change declaration of `f` from `std::function<void(int)>` to `auto`
- make the lambda non-generic by changing `auto b` to `int b`
- use Clang (e.g. v3.5.0)
Suspect detection of odr-use is breaking, or this could be related to bug
61814, or something else entirely?