template<typename T>
struct Point {
using value_type = T;
using self_type = Point<T>;
value_type m_value;
Point(value_type value) : m_value(value) {}
template<typename RhsT> Point& operator = (const Point<RhsT>& rhs) {
m_value = static_cast<value_type>(rhs.m_value);
return *this;
}
};
int main() {
Point<int> a1(4);
Point<int> a2(5);
Point<double> a3(6.0);
a1 = a2;
a2 = a3;
return 0;
}
dGVtcGxhdGU8dHlwZW5hbWUgVD4Kc3RydWN0IFBvaW50IHsKCXVzaW5nIHZhbHVlX3R5cGUgPSBUOwoJdXNpbmcgc2VsZl90eXBlID0gUG9pbnQ8VD47CgoJdmFsdWVfdHlwZSBtX3ZhbHVlOwoKICAgIFBvaW50KHZhbHVlX3R5cGUgdmFsdWUpIDogbV92YWx1ZSh2YWx1ZSkge30KCgl0ZW1wbGF0ZTx0eXBlbmFtZSBSaHNUPiBQb2ludCYgb3BlcmF0b3IgPSAoY29uc3QgUG9pbnQ8UmhzVD4mIHJocykgewoJCW1fdmFsdWUgPSBzdGF0aWNfY2FzdDx2YWx1ZV90eXBlPihyaHMubV92YWx1ZSk7CgkJcmV0dXJuICp0aGlzOwoJfQp9OwoKaW50IG1haW4oKSB7CglQb2ludDxpbnQ+IGExKDQpOwoJUG9pbnQ8aW50PiBhMig1KTsKCVBvaW50PGRvdWJsZT4gYTMoNi4wKTsKCiAgICBhMSA9IGEyOwogICAgYTIgPSBhMzsKCglyZXR1cm4gMDsKfQ==