我希望下面的例子比标题更容易混淆!
假设我们有一些元功能; Trait
,ReversePartial
(将参数包中的类型绑定到可变参数类模板的背面)和Test
接收器(接受接收的别名模板)。
template<typename, typename...>
struct Trait : std::true_type {};
template<template<typename...> typename Template, typename... Ts>
struct ReversePartial
{
template<typename... Us>
using Apply = Template<Us..., Ts...>;
};
template<template<typename...> typename>
struct Test {};
为什么在明确指定要应用的类型时能够编译
using T = Test<ReversePartial<Trait, int, double>::Apply>; // compiles
但是通过参数包传递它们时不是吗?
error: template argument for template template parameter must be a class template or type alias template
template<typename... Ts>
using U = Test<ReversePartial<Trait, Ts...>::Apply>; // does not compile
是否有解决此问题的方法?