8 return (lhs.x == rhs.x) && (lhs.y == rhs.y);
15using Unique = std::unique_ptr<T>;
17template <
typename T,
typename... Args>
18constexpr Unique<T> CreateUnique(Args &&...args) {
return std::make_unique<T>(std::forward<Args>(args)...); }
21using Shared = std::shared_ptr<T>;
23template <
typename T,
typename... Args>
24constexpr Shared<T> CreateShared(Args &&...args) {
return std::make_shared<T>(std::forward<Args>(args)...); }
30#define ASSERT(exp) assert(exp)
33#define ALL(a) (a.begin()), (a.end())
36#define CLASSNAME(elem) typeid(elem).name()