На самом деле существует перегрузка & lt; оператор, который выглядит примерно так:
ostream & operator <<( ostream &, const void * );
, который делает то, что вы ожидаете, - выводит в шестнадцатеричном формате. Не может быть такой стандартной перегрузки библиотек для указателей на функции, поскольку они представляют собой бесконечное количество типов. Таким образом, указатель преобразуется в другой тип, который в этом случае выглядит как bool - я не могу заранее запомнить правила для этого.
Изменить: в стандарте C ++ указано:
4.12 Логические преобразования
1 Значение арифметики, перечисления, указателя или указателя на тип члена может быть преобразовано в rvalue типа bool.
blockquote>Это единственное преобразование, указанное для указателей функций.