template <class T> struct B;
template <class T> B<T> operator+(const B<T>&);
template <class T>
struct A {
friend B<T> operator+<T>(const B<T>&);
};
template <class T>
struct B
{
B() {}
B(const A<T>&) {}
friend B operator+<T>(const B&);
};
template <class T> B<T> operator+(const B<T>&)
{
return B<T>();
}
int main()
{
A<int> a;
B<int> b;
+b;
}
dGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBCOwoKdGVtcGxhdGUgPGNsYXNzIFQ+IEI8VD4gb3BlcmF0b3IrKGNvbnN0IEI8VD4mKTsKCnRlbXBsYXRlIDxjbGFzcyBUPgpzdHJ1Y3QgQSB7IAogICBmcmllbmQgQjxUPiBvcGVyYXRvcis8VD4oY29uc3QgQjxUPiYpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIFQ+CnN0cnVjdCBCCnsKICAgQigpIHt9CiAgIEIoY29uc3QgQTxUPiYpIHt9CiAgIGZyaWVuZCBCIG9wZXJhdG9yKzxUPihjb25zdCBCJik7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gQjxUPiBvcGVyYXRvcisoY29uc3QgQjxUPiYpCnsKICAgcmV0dXJuIEI8VD4oKTsKfQoKaW50IG1haW4oKQp7CiAgIEE8aW50PiBhOwogICBCPGludD4gYjsKICAgK2I7Cn0KCg==