Functional Programming Using C++ Templates (Part 1) - Golodetz, S (Overload, 2007)