https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107741
Bug ID: 107741 Summary: Missed member variable name in mangling of externally visible lambdas used in inline initialization of static members Product: gcc Version: 13.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: dblaikie at gmail dot com Target Milestone: --- https://godbolt.org/z/7514cTh5o ``` struct A { static constexpr auto x = [] { return 1; }; }; template <typename> struct B { static constexpr auto x = [] { return 1; }; }; template <typename T> struct C { static int x; }; void side_effect(); template <typename T> int C<T>::x = (side_effect(), [] { return 1; }()); template int C<int>::x; void f() { A::x(); B<int>::x(); } ``` GCC produces these manglings: ``` A::{lambda()#1}::operator()() const _ZNK1AUlvE_clEv B<int>::{lambda()#3}::operator()() const _ZNK1BIiEUlvE1_clEv C<int>::x::{lambda()#1}::operator()() const _ZNK1CIiE1xMUlvE_clEv ``` I believe in the first two cases, the member variable scope ("::x") is missing. Oh, and it looks like the lambda numbering is off - B's lambda is 1 within its scope (either the type or the member) - so I guess that needs to be fixed too/scoping the numbering to within the member along with the mangling having that scoping.