To clarify, cout << bell is not a function call to bell(), it's a function call to an operator<<() overload that passes [a function pointer to bell()] to the overload. Inside the overload, the function pointer is called.
This ostream member function that does take a pointer to function as argument.
The type of the pointer argument is ostream& (*)(ostream&)
Since this overload of << is a member, it has this pointing to the ostream.
As shown in mbozzi's example, the implementation of that member function could look like:
if you want to circle back to the big question, there are several other ways to "call a function without ()".
you can write a macro that hides the () as the most derpy one. This is just hiding the syntax.
constructors are another example. type foo; //ctor is invoked, which can do whatever it wants!
any operator overload. eg !foo can do whatever it wants inside too.
on the flipside, you can call operators with ():
foo.operator !(); //something like this. I may not have the exact syntax, its not something you need to do often.
there are probably some other ways as well, but those are the more common ones. Its best if you do not go out of your way to do this as it makes code harder to read. Many languages do not allow operator overloading because you can do such unreadable, convoluted nonsense with it (like having your assignment operator draw on the screen, eg to draw a triangle you say x =1 or to draw a square say x = 2; ... you can't follow code written like that esp if it has no comments...)