Я хотел бы создать шаблон, который будет принимать пакет шаблонов и создавать их экземпляры с тем же пакетом аргументов.
К сожалению, я не могу понять, как расширить пакет параметров внутри пакета параметров шаблонов.
Как я могу сделать эту компиляцию?
#include<type_traits>
#include <tuple>
template <template <typename...> typename... Args>
struct TupleTupleMaker
{
template <typename... InstantiateWith>
using NewTupleTuple = typename std::tuple<Args<InstantiateWith...>...>;
};
template<typename a, typename b>
using tuple1 = std::tuple<int,a,b>;
template<typename a, typename b>
using tuple2 = std::tuple<a,b,b>;
using expected = std::tuple<
std::tuple<int,int,double>,
std::tuple<int,double,double>>;
using actual = TupleTupleMaker<tuple1,tuple2>::NewTupleTuple<int,double>;
static_assert(std::is_same_v<actual,expected>, "Should be same");