Passing functions and function objects to general routines is a powerful abstraction mechanism that should be taught in freshman computer science. In C++, a “function” can be defined directly by the user or by a library or can be defined indirectly via operator() as a member function of a class. It is not obvious how to treat these “functions” in a uniform manner. We will show how function templates in C++ provide an elegant and teachable mechanism for passing entities with functional behavior as arguments to other functions.