Это самый короткий и краткий способ сделать это:
template < class ... Types > struct type_list {
template<template<class...>class Z>
using apply_to = Z<Types...>;
};
using value_t = value_types::apply_to<std::variant>;
Вы можете полюбить. Например:
template<class T, template<class...>class Z>
struct transcribe_parameters;
template<class T, template<class...>class Z>
using transcribe_parameters_t = typename
transcribe_parameters<T,Z>::type;
template<template<class...>class Zin, class...Ts, template<class...>class Zout>
struct transcribe_parameters<Zin<Ts...>, Zout> {
using type=Zout<Ts...>;
};
, что дает вам:
using value_t = transcribe_parameters_t<value_types, std::variant>;
но наличие встроенной функции type_list
не представляется необоснованным.