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.