The Phoenix library enables FP techniques such as higher order functions,
lambda (unnamed functions), currying
(partial function application) and lazy evaluation in C++. The focus is more
on usefulness and practicality than purity, elegance and strict adherence to
FP principles.

FP is a programming discipline that is not at all tied to a specific language.
FP as a programming discipline can, in fact, be applied to many programming
languages. In the realm of C++ for instance, we are seeing more FP techniques
being applied. C++ is sufficiently rich to support at least some of the most
important facets of FP. C++ is a multiparadigm programming language. It is
not only procedural. It is not only object oriented. Beneath the core of the
standard C++ library, a closer look into STL gives us a glimpse of FP already
in place. It is obvious that the authors of STL know and practice FP. In the
near future, we shall surely see more FP trickle down into the mainstream.

The truth is, most of the FP techniques can coexist quite well with the standard
object oriented and imperative programming paradigms. When we are using STL
algorithms and functors (function objects) for example, we are already doing
FP. Phoenix is an evolutionary next step.