boost::variant exposes its list of variant types via boost::variant<>::types, which can be conveniently used with boost::mpl::for_each. std::variant is missing such a member.
I see std::variant_alternative is provided. Can this be used to produce a type list that boost::mpl::for_each can ingest? Or does it enable a different iteration strategy?
I'm not 100% familiar with Boost.MPL, but this should do what you're looking for:
See it live on Wandbox