Automatic differentiation in C++; infinite differentiability of conditionals, loops, recursion and all things C++