#include <iostream>
struct S1 {
void f() { std::cout << "S1\n"; }
};
struct S2 {
void f() { std::cout << "S2\n"; }
void g() {}
};
template <class T>
struct D : private T
{
using T::f;
};
int main() {
D<S1>().f();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IFMxIHsKCXZvaWQgZigpIHsgc3RkOjpjb3V0IDw8ICJTMVxuIjsgfQp9OwoKc3RydWN0IFMyIHsKCXZvaWQgZigpIHsgc3RkOjpjb3V0IDw8ICJTMlxuIjsgfQoJdm9pZCBnKCkge30KfTsKCnRlbXBsYXRlIDxjbGFzcyBUPgpzdHJ1Y3QgRCA6IHByaXZhdGUgVAp7Cgl1c2luZyBUOjpmOwp9OwoKaW50IG1haW4oKSB7CglEPFMxPigpLmYoKTsKCglyZXR1cm4gMDsKfQ==