
Ok, I don't know what happened to the old discussion about naming of stuff that can be safely applied by mpl::apply. We have the following constructs: 1. "metafunctions," which are templates classes with a type identifier called 'type', 2. "metafunction classes," which are classes with a nested template class called 'apply', which is a "metafunction" in its own right, and 3. "lambda expression." Two of them - #2 and #3 - share a quite important trait: they can be passed as the first argument to mpl::apply. I suggest that we call anything applicable via mpl::apply a "metafunctor." And have "metafunctoid" denote that category extended with #1 - ordinary metafunctions - above. It is a bit boring not to be able to use a common name for these constructs, especially when trying to tech others about metaprogramming techniques in C++. And I do not see such common names in the MPL documentation (or book.) /David