#include <string>
#include <type_traits>
template<typename T>
struct Point {
typedef T value_type;
typedef Point<T> self_type;
value_type m_value;
Point(value_type value) : m_value(value) {}
template<typename RhsT>
self_type& 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;
}
ICAgICNpbmNsdWRlIDxzdHJpbmc+CiAgICAjaW5jbHVkZSA8dHlwZV90cmFpdHM+CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgIHN0cnVjdCBQb2ludCB7CiAgICAgICAgdHlwZWRlZiBUIHZhbHVlX3R5cGU7CiAgICAgICAgdHlwZWRlZiBQb2ludDxUPiBzZWxmX3R5cGU7CgogICAgICAgIHZhbHVlX3R5cGUgbV92YWx1ZTsKCiAgICAgICAgUG9pbnQodmFsdWVfdHlwZSB2YWx1ZSkgOiBtX3ZhbHVlKHZhbHVlKSB7fQoKICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBSaHNUPgogICAgICAgIHNlbGZfdHlwZSYgb3BlcmF0b3IgPSAoY29uc3QgUG9pbnQ8UmhzVD4mIHJocykgewogICAgICAgICAgICBtX3ZhbHVlID0gc3RhdGljX2Nhc3Q8dmFsdWVfdHlwZT4ocmhzLm1fdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgfQogICAgfTsKCiAgICBpbnQgbWFpbigpIHsKICAgICAgICBQb2ludDxpbnQ+IGExKDQpOwogICAgICAgIFBvaW50PGludD4gYTIoNSk7CiAgICAgICAgUG9pbnQ8ZG91YmxlPiBhMyg2LjApOwoKICAgICAgICBhMSA9IGEyOwogICAgICAgIGEyID0gYTM7CgogICAgICAgIHJldHVybiAwOwogICAgfQ==