I present a way to use modern C++ metaprogramming techniques to represent Functors and Monads in a way that is analogous to the way it is done in Haskell. I show how a generic free monad can be written such that any Functor has a corresponding free monad.