C++ 从结构中获取所有可变模板类型,该结构是函数模板中的类型参数

C++ 从结构中获取所有可变模板类型,该结构是函数模板中的类型参数,c++,templates,template-meta-programming,typetraits,C++,Templates,Template Meta Programming,Typetraits,下面是一个简单的例子: template<typename ...Types> struct Pack {}; template<typename ...TemplateTemplateTypes> bool AllConstructible() { return (std::is_constructible_v </*do something to archive all types in every TemplateTempla

下面是一个简单的例子:

template<typename ...Types>
struct Pack {};

template<typename ...TemplateTemplateTypes>
bool AllConstructible()
{
    return (std::is_constructible_v
            </*do something to archive all types in every TemplateTemplateType*/> 
            and ... and true);
}

struct Empty{};

int main()
{
    std::cout << std::boolalpha << AllConstructible<Pack<int, const int&>, Pack<Empty>>();
}
模板
结构包{};
模板
bool-AllConstructible()
{
返回(std::是否可构造
而且……而且是真的);
}
结构空{};
int main()
{

std::cout您可以侵入一个帮助器模板,该模板将解包参数:

template<typename ...Types>
struct Helper;

template<typename ...Types>
struct Helper<Pack<Types...>>
{
    static constexpr bool value{std::is_constructible_v<Types...>};
};

template<typename ...TemplateTemplateTypes>
bool AllConstructible()
{
    return (Helper<TemplateTemplateTypes>::value and ... and true);
}
模板
结构助手;
模板
结构辅助程序
{
静态constexpr布尔值{std::is_constructible_v};
};
模板
bool-AllConstructible()
{
返回(Helper::value和…以及true);
}

Why
return(std::is\u constructible\u v和…和true)
不起作用?@VTT它可以编译,但结果不是真的,因为它只会判断
Pack
是否可以构造,而不是它的模板类型:
std::cout所以你想检查
int
const int&
Empty
是可构造的吗?不。
的签名是可构造的
is
templatestruct是可构造的;
我想检查int是否可从
const int&
构造,
Empty
可从空参数构造,
int
不应从
Empty