class Y{
template<class T>
friend class X;
void a_private_func() const{}
};
template<class T>
class X{
public:
void f(Y const& y){ y.a_private_func(); }
};
template<class T>
class X<T*>{
public:
void g(Y const& y){ y.a_private_func(); }
};
int main(){
X<int> xi;
X<int*> xpi;
Y y;
xi.f(y);
xpi.g(y);
}
Y2xhc3MgWXsKICB0ZW1wbGF0ZTxjbGFzcyBUPgogIGZyaWVuZCBjbGFzcyBYOwogIAogIHZvaWQgYV9wcml2YXRlX2Z1bmMoKSBjb25zdHt9Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBUPgpjbGFzcyBYewpwdWJsaWM6CiAgdm9pZCBmKFkgY29uc3QmIHkpeyB5LmFfcHJpdmF0ZV9mdW5jKCk7IH0KfTsKCnRlbXBsYXRlPGNsYXNzIFQ+CmNsYXNzIFg8VCo+ewpwdWJsaWM6CiAgdm9pZCBnKFkgY29uc3QmIHkpeyB5LmFfcHJpdmF0ZV9mdW5jKCk7IH0KfTsKCmludCBtYWluKCl7CiAgWDxpbnQ+IHhpOwogIFg8aW50Kj4geHBpOwogIFkgeTsKICB4aS5mKHkpOwogIHhwaS5nKHkpOwp9