#include <iostream>
template <typename T>
class X {
public:
X(T d): y(d) {}
private:
class Y {
public:
Y(T d): data(d) {}
private:
T data;
friend std::ostream &operator <<(std::ostream &os, Y const& y)
{
os << "Y(" << y.data << ")";
return os;
}
};
Y y;
template <typename U>
friend std::ostream &operator <<(std::ostream &os, const X<U> &x);
};
template <typename U>
std::ostream &operator <<(std::ostream &os, const X<U> &x) {
os << "X " << x.y;
return os;
}
int main() {
std::cout << X<int>(1);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmNsYXNzIFggewpwdWJsaWM6CiAgICBYKFQgZCk6IHkoZCkge30KCnByaXZhdGU6CiAgICBjbGFzcyBZIHsKICAgIHB1YmxpYzoKICAgICAgICBZKFQgZCk6IGRhdGEoZCkge30KCiAgICBwcml2YXRlOgogICAgICAgIFQgZGF0YTsKCiAgICAgICAgZnJpZW5kIHN0ZDo6b3N0cmVhbSAmb3BlcmF0b3IgPDwoc3RkOjpvc3RyZWFtICZvcywgWSBjb25zdCYgeSkKCSAgICB7CgkgICAgICAgIG9zIDw8ICJZKCIgPDwgeS5kYXRhIDw8ICIpIjsKCSAgICAgICAgcmV0dXJuIG9zOwoJICAgIH0KICAgIH07CgogICAgWSB5OwoKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPgogICAgZnJpZW5kIHN0ZDo6b3N0cmVhbSAmb3BlcmF0b3IgPDwoc3RkOjpvc3RyZWFtICZvcywgY29uc3QgWDxVPiAmeCk7Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4Kc3RkOjpvc3RyZWFtICZvcGVyYXRvciA8PChzdGQ6Om9zdHJlYW0gJm9zLCBjb25zdCBYPFU+ICZ4KSB7CiAgICBvcyA8PCAiWCAiIDw8IHgueTsKICAgIHJldHVybiBvczsKfQoKaW50IG1haW4oKSB7CiAgICBzdGQ6OmNvdXQgPDwgWDxpbnQ+KDEpOwogICAgcmV0dXJuIDA7Cn0=