Given:
void f(int) {} void(*g)(int) = f; cout << g;
(with the expected #include and usings), the value printed is a rather surprising "true". Rather useless too.
The standard defines:
ostream& operator<<(ostream&, void*);
which picks up all data pointers and prints their hex value, but does not pick up function pointers because there is no default conversion from function pointer to void*. Absent that, we fall back to legacy conversions from C and the function pointer is converted to bool.
There should be an analogous inserter that prints the address of a function pointer.