Вот минимальный пример:
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>>();
}
Функция AllConstructible
вернет true, если все is_constructible_v<Pack's Types>
удерживают true.
Легко достичь всех типов внутри определения Pack
(просто используйте Types...
), но как это сделать снаружи?