This works around a compiler bug present in most older versions of MSVC where it absolutely wanted to use a deleted copy constructor even if a move constructor was available. This just moves the relevant code into the default constructor.
This introduces action definitions which can then be instantiated to form actual actions with expressions as their parameters.
This is generally a safe operation and will make the system a bit easier to use.