use new preprocessors to define functors (tested)