Вопрос в значительной степени находится в названии. Согласно С++ Reference, std::endl - фактически функция. Рассматривая его объявление в <iostream>, это можно проверить.
Однако, когда вы используете std::endl, вы не используете std::endl(). Вместо этого вы используете:
std::cout << "Foo" << std::endl;
Фактически, если вы используете std::endl(), компилятор требует больше параметров, как указано в приведенной выше ссылке.
Кто-нибудь хотел бы объяснить это? Что особенного в std::endl? Можем ли мы реализовать функции, не требующие каких-либо скобок при вызове?