template<int N>
class A
{
template<int N2> friend class A;
public:
A() : i(N) {}
template<int K>
void foo(A<K> other)
{
i = other.i; // <-- other.i is private
}
private:
int i;
};
int main()
{
A<1> a1;
A<2> a2;
a1.foo(a2);
return 0;
}
dGVtcGxhdGU8aW50IE4+CmNsYXNzIEEKewogICAgdGVtcGxhdGU8aW50IE4yPiBmcmllbmQgY2xhc3MgQTsKcHVibGljOgogICAgQSgpIDogaShOKSB7fQoKICAgIHRlbXBsYXRlPGludCBLPgogICAgdm9pZCBmb28oQTxLPiBvdGhlcikKICAgIHsKICAgICAgICBpID0gb3RoZXIuaTsgLy8gPC0tIG90aGVyLmkgaXMgcHJpdmF0ZQogICAgfQoKcHJpdmF0ZToKICAgIGludCBpOwp9OwoKaW50IG1haW4oKQp7CiAgICBBPDE+IGExOwogICAgQTwyPiBhMjsKICAgIGExLmZvbyhhMik7CgogICAgcmV0dXJuIDA7Cn0=