А теперь выведите typeid(first).name() на экран и удивитесь.
Первая строчка это объявление функции first без параметров и возвращающая int. Имя функции превращается в указатель, указатель конвертируется в bool (true), который конвертируется в int (1).
Не знал, что в теле ф-ции можно объявлять прототипы ф-ций, спасибо.
Тогда сразу можно еще вопрос, почему адрес ф-ции при выводе на консоль преобразуется в bool ?
Даниил Демидко: Перегрузки оператора вывода, принимающей указатель на функцию нет, поэтому рассматриваются неявные преобразования. Любой указатель может быть преобразован в bool для теста на NULL.
Даниил Демидко: В С++, в целях совместимости с С есть такая штука, называемая Most Vexing Parse. Суть такова: если что-то МОЖЕТ быть распознано как объявление функции, оно БУДЕТ распознано как объявление функции.