Этот код
template <typename... T>
struct FooGroup;
объявляет FooGroup
как struct
, который получает список переменных типа шаблона шаблона.
template <typename... FooTypes, typename... BarTypes>
struct TEST<FooGroup<FooTypes...>, BarGroup<BarTypes...>>
является частью специализации шаблона.
Я полагаю, что TEST
объявлен следующим образом
template <typename, typename>
struct TEST;
, поэтому при получении параметра двух типов шаблонов.
С
template <typename... FooTypes, typename... BarTypes>
struct TEST<FooGroup<FooTypes...>, BarGroup<BarTypes...>>
вы объявляете частичноеспециализация TEST
в том случае, если первый параметр шаблона имеет форму FooGroup<FooTypes...>
(где FooTypes...
- переменный список параметров шаблона), а второй параметр шаблона имеет форму BarGroup<BarTypes...>
(где, я полагаю, BarGroup
определяется почти как FooGroup
, а BarTypes...
- это еще один вариационный список параметров шаблона)