// lambda syntax; construction & call int x = 0; int y = 10; [x, &y] (int z) { return x + (++y) + (++z); } (5); // desugared struct __lambda1 { int x; int &y; constexpr __lambda1(int _x, int &_y) : x(_x), y(_y) { } decltype(auto) operator() (int z) const { return x + (++y) + (++z); } }; // construction & call int x = 0; int y = 10; __lambda1(x, y)(5);