Use Boost.MPL to avoid duplicated specification of variant types.
Simplify MPL usage.