#pragma once namespace td { template struct Vec2 { union { T x; T r; }; union { T y; T g; }; Vec2(T X = 0, T Y = 0) : x(X), y(Y) {} friend bool operator==(const Vec2& vec2, const Vec2& other) { return vec2.x == other.x && vec2.y == other.y; } }; template struct Vec3 { union { T x; T r; }; union { T y; T g; }; union { T z; T b; }; Vec3(T X = 0, T Y = 0, T Z = 0) : x(X), y(Y), z(Z) {} }; using Vec2i = Vec2; using Vec2u = Vec2; using Vec2f = Vec2; using Vec2d = Vec2; using Vec3i = Vec3; using Vec3u = Vec3; using Vec3f = Vec3; using Vec3d = Vec3; } // namespace td