Он преобразуется в указатель на функцию, а затем через это через bool:
void foo ();
std::cout << &foo << std::endl;
Печатает одно и то же, и те же предупреждения; Мне случилось с компиляцией с gcc, установленным в 17 стандартных, и я увидел:
main.cpp:6:56: warning: the address of 'static constexpr bool main()::<lambda(const char*)>::_FUN(const char*)' will never be NULL [-Waddress]
std::cout << [](const char* arg){ return arg[0]=='s'; } << std::endl;
С приведенным выше кодом вы видите одно и то же предупреждение.
Чтобы добавить немного к моему ответу: существует перегрузка потока для void*. Однако указатели на функции, в отличие от указателей на данные, не могут неявно преобразовывать в void*. Единственное неявное преобразование для указателей на функции является логическим, и, конечно, для bool существует операция потока, поэтому происходит перегрузка и происходит неявное преобразование. См. Как напечатать указатели на функции с помощью cout?.