I am using variadic parameter packs for policy based class design.
template
class IShader : public Policies... {
};
Make a nested class, with each layer having one variadic pack. In essence:
template class Wrapper {
public:
template class Type {
//Here you have access to both template packs
//...
}
}
//Use like this:
Wrapper::Type a;
//...
Define any function of Type
outside both classes, but inside the header, or gcc will get confused.
For a more complete use case, see my answer here