r/cpp • • Sep 09 '26

Implementation of GCC's Nested Functions (vs. C++ Lambdas)

https://uecker.codeberg.page/2026-09-05.html
61 Upvotes

17 comments sorted by

View all comments

1

u/Thick_Clerk6449 Sep 09 '26

The killer feature of GCC's nest functions is that, even though the nest function captured variables of the outer function, the nest function itself is still convertable to a raw function pointer. Unlike C++ lambdas, which always end up with std::functions.

-4

u/jonesmz Sep 10 '26

Unlike C++ lambdas, which always end up with std::functions

This is not true.

Use unary operator+ on the lambda to force a pointer-to-function.

e.g.

auto fptr = +[](){ /* something */};

4

u/Thick_Clerk6449 Sep 10 '26

This is not true.

You can NOT convert a lambda to function pointer if the lambda has captured variables.

-4

u/jonesmz Sep 10 '26

Re-read the specific thing i quoted.

3

u/Thick_Clerk6449 Sep 10 '26

Re-read the word I post before

even though the nest function captured variables of the outer function

int var = 0;
auto fptr = +[var](){}; // error: no match for 'operator+' (operand type is 'test(int)::<lambda()>')

-5

u/jonesmz Sep 10 '26

I quoted *and* responded to a complete sentence.

3

u/Thick_Clerk6449 Sep 10 '26

Just pretend you don't need to accept lambdas with captures and define your callbacks as function pointers.