template<typename T>
class Vector2D
{
public:
explicit Vector2D(): x(0), y(0)
{
}
explicit Vector2D(const T x_, const T y_): x(x_), y(y_)
{
}
template<typename U>
Vector2D(const Vector2D<U>& v): x(T(v.x)), y(T(v.y))
{
}
union
{
struct { T x, y; };
struct { T i, j; };
};
};
int main(int argc, char* argv[])
{
Vector2D<int> v1(1, 2);
Vector2D<float> v2(v1);
return 0;
}
dGVtcGxhdGU8dHlwZW5hbWUgVD4KY2xhc3MgVmVjdG9yMkQKewpwdWJsaWM6CglleHBsaWNpdCBWZWN0b3IyRCgpOiB4KDApLCB5KDApCgl7Cgl9CiAgICAKCWV4cGxpY2l0IFZlY3RvcjJEKGNvbnN0IFQgeF8sIGNvbnN0IFQgeV8pOiB4KHhfKSwgeSh5XykKCXsKCX0KICAgIAogICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KICAgIFZlY3RvcjJEKGNvbnN0IFZlY3RvcjJEPFU+JiB2KTogeChUKHYueCkpLCB5KFQodi55KSkKCXsKCX0KICAgIAogICAgdW5pb24KCXsKCQlzdHJ1Y3QgeyBUIHgsIHk7IH07CgkJc3RydWN0IHsgVCBpLCBqOyB9OwoJfTsKfTsKCmludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCnsKICAgIFZlY3RvcjJEPGludD4gdjEoMSwgMik7CiAgICBWZWN0b3IyRDxmbG9hdD4gdjIodjEpOwogICAgCiAgICByZXR1cm4gMDsKfQ==