class A {
template <class T> friend class B;
void f() { }
};
template<class T>
class B
{
A& a;
public:
B(A&& a_) : a(a_) { }
void f() { a.f(); }
};
int main() {
B<int>(A()).f(); // ok with friend
}
Y2xhc3MgQSB7CiAgdGVtcGxhdGUgPGNsYXNzIFQ+IGZyaWVuZCBjbGFzcyBCOwogIHZvaWQgZigpIHsgfQp9OwogCnRlbXBsYXRlPGNsYXNzIFQ+CmNsYXNzIEIKewogIEEmIGE7CnB1YmxpYzoKICBCKEEmJiBhXykgOiBhKGFfKSB7IH0KICB2b2lkIGYoKSB7IGEuZigpOyB9Cn07CiAKaW50IG1haW4oKSB7CiAgQjxpbnQ+KEEoKSkuZigpOyAvLyBvayB3aXRoIGZyaWVuZAp9