more meaningful error message
make apply() static and disable copy ctor/assignment