#include <functional>

Otherwise MSVC won't find some std:: functions
Remove double default constructor declaration

MSVC gave a warning.
Forward-declaring "Constant" as struct instead of class

It actually is a struct. MSCV has linker issues if these are
inconsistent.