Here is my solution that uses C ++ 11:
template <typename ...P> struct dummy {}; template <template <typename ...> class Obj, typename T, typename ...P> struct internal; template <template <typename ...> class Obj, typename ...P1, typename T, typename ...P2> struct internal<Obj, dummy<P1...>, T, P2...> { using type = typename internal<Obj, dummy<P1..., T>, P2...>::type; }; template <template <typename ...> class Obj, typename ...P1, typename T, typename L> struct internal<Obj, dummy<P1...>, T, L> { using type = Obj<P1..., T>; }; template <template <typename ...> class T, typename ...P> struct subst_all_but_last { using type = typename internal<T, dummy<>, P...>::type; };
Use this:
using bar = typename subst_all_but_last<some_template, Ts...>::type;
instead
using bar = some_template<magically_get_all_but_last(Ts)...>;
source share