struct MyBaseClass
{
protected:
void f() {}
};
template <typename... Args>
struct MyClass;
template <typename Fn, typename... Args>
struct MyClass<Fn, Args...> : MyClass<Args...>
{
void call_f() {
MyBaseClass::f();
}
};
template <typename Fn>
struct MyClass<Fn> : MyBaseClass {};
int main() {
MyClass<int, float, char, double> me;
me.call_f();
}
c3RydWN0IE15QmFzZUNsYXNzCnsKcHJvdGVjdGVkOgogICB2b2lkIGYoKSB7fQp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lLi4uIEFyZ3M+CnN0cnVjdCBNeUNsYXNzOwoKdGVtcGxhdGUgPHR5cGVuYW1lIEZuLCB0eXBlbmFtZS4uLiBBcmdzPgpzdHJ1Y3QgTXlDbGFzczxGbiwgQXJncy4uLj4gOiBNeUNsYXNzPEFyZ3MuLi4+CnsKCXZvaWQgY2FsbF9mKCkgewoJCU15QmFzZUNsYXNzOjpmKCk7Cgl9Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgRm4+CnN0cnVjdCBNeUNsYXNzPEZuPiA6IE15QmFzZUNsYXNzIHt9OwoKaW50IG1haW4oKSB7CglNeUNsYXNzPGludCwgZmxvYXQsIGNoYXIsIGRvdWJsZT4gbWU7CgltZS5jYWxsX2YoKTsKfQ==