template <typename T>
struct foo;
template <typename... Types>
class Collection
{
};
template <
template <typename...> class Container,
typename... Types>
struct foo<Container<Types...>> : Types...
{
int x;
};
class ClassA
{
public:
int val1;
};
class ClassB
{
public:
int val2;
};
int main()
{
foo<Collection<ClassA, ClassB>> f;
f.val1 = 10;
f.val2 = 20;
return 0;
}
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBmb287Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHlwZXM+IApjbGFzcyBDb2xsZWN0aW9uCnsKCn07Cgp0ZW1wbGF0ZSA8CiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4+IGNsYXNzIENvbnRhaW5lciwKICAgIHR5cGVuYW1lLi4uIFR5cGVzPgpzdHJ1Y3QgZm9vPENvbnRhaW5lcjxUeXBlcy4uLj4+IDogVHlwZXMuLi4KewogICAgaW50IHg7Cn07CgpjbGFzcyBDbGFzc0EgCnsKcHVibGljOgogICAgaW50IHZhbDE7Cn07CmNsYXNzIENsYXNzQiAKewpwdWJsaWM6CiAgICBpbnQgdmFsMjsKfTsKCmludCBtYWluKCkKewogICAgZm9vPENvbGxlY3Rpb248Q2xhc3NBLCBDbGFzc0I+PiBmOwogICAgCiAgICBmLnZhbDEgPSAxMDsKICAgIGYudmFsMiA9IDIwOwogICAgcmV0dXJuIDA7Cn0=