Function pointers contextually convert to bool because they can be null. But a Function lvalues decay to non-null function pointers (unless you're using `__attribute__((weak))`).
This also applies to array to pointer conversions so perhaps they should be included.

Perhaps the rule could be
> A prvalue of arithmetic, unscoped enumeration, pointer, or pointer-to-member type can be converted to a prvalue of type bool. A zero value, null pointer value, or null member pointer value is converted to false; any other value is converted to true. If the expression is a glvalue of a function or array type, converted to a function pointer or element pointer, the conversion is deprecated.

On Fri, 8 Sept 2023 at 16:47, Frederick Virchanza Gotham via Std-Proposals <std-proposals@lists.isocpp.org> wrote:
Today I discovered the following bug:

    if ( wxIsMainThread ) DoSomething();

The bug here is that 'wxIsMainThread' is a function, and so it should have been:

    if ( wxIsMainThread() ) DoSomething();

I think where we have a function converting to bool -- but not where
we have a function pointer converting to bool -- the compiler should
be mandated to issue a diagnostic.
--
Std-Proposals mailing list
Std-Proposals@lists.isocpp.org
https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals