template<template<class...> class TT, class ArgsT>
struct make_over;
template<template<class...> class TT, template<class...> class ArgsT, class... Ts>
struct make_over<TT, ArgsT<Ts...>>{ using type = ArgsT<TT<Ts>...>; };
template<template<class...> class TT, class ArgsT>
using MakeOver = typename make_over<TT, ArgsT>::type;
#include <tuple>
#include <type_traits>
template<class> struct X{};
static_assert(std::is_same<MakeOver<X, std::tuple<int, float, bool>>,
std::tuple<X<int>, X<float>, X<bool>>>(), "...");
int main(){}
dGVtcGxhdGU8dGVtcGxhdGU8Y2xhc3MuLi4+IGNsYXNzIFRULCBjbGFzcyBBcmdzVD4Kc3RydWN0IG1ha2Vfb3ZlcjsKCnRlbXBsYXRlPHRlbXBsYXRlPGNsYXNzLi4uPiBjbGFzcyBUVCwgdGVtcGxhdGU8Y2xhc3MuLi4+IGNsYXNzIEFyZ3NULCBjbGFzcy4uLiBUcz4Kc3RydWN0IG1ha2Vfb3ZlcjxUVCwgQXJnc1Q8VHMuLi4+PnsgdXNpbmcgdHlwZSA9IEFyZ3NUPFRUPFRzPi4uLj47IH07Cgp0ZW1wbGF0ZTx0ZW1wbGF0ZTxjbGFzcy4uLj4gY2xhc3MgVFQsIGNsYXNzIEFyZ3NUPgp1c2luZyBNYWtlT3ZlciA9IHR5cGVuYW1lIG1ha2Vfb3ZlcjxUVCwgQXJnc1Q+Ojp0eXBlOwoKI2luY2x1ZGUgPHR1cGxlPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+Cgp0ZW1wbGF0ZTxjbGFzcz4gc3RydWN0IFh7fTsKCnN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPE1ha2VPdmVyPFgsIHN0ZDo6dHVwbGU8aW50LCBmbG9hdCwgYm9vbD4+LAogICAgc3RkOjp0dXBsZTxYPGludD4sIFg8ZmxvYXQ+LCBYPGJvb2w+Pj4oKSwgIi4uLiIpOwoKaW50IG1haW4oKXt9