diff --git a/src/nostalgia/geo/vec.cpp b/src/nostalgia/geo/vec.cpp index 95a500f3..3e56261c 100644 --- a/src/nostalgia/geo/vec.cpp +++ b/src/nostalgia/geo/vec.cpp @@ -8,11 +8,9 @@ namespace nostalgia::geo { -#ifndef OX_OS_BareMetal // doesn't compile in devKitPro for some reason static_assert([] { Vec2 v(1, 2); return v.x == 1 && v.y == 2 && v[0] == 1 && v[1] == 2 && v.size() == 2; -}); -#endif +}()); -} \ No newline at end of file +} diff --git a/src/nostalgia/geo/vec.hpp b/src/nostalgia/geo/vec.hpp index e79ea698..0af815f1 100644 --- a/src/nostalgia/geo/vec.hpp +++ b/src/nostalgia/geo/vec.hpp @@ -9,6 +9,7 @@ #endif #include +#include #include #include #include @@ -192,11 +193,35 @@ struct Vec { } constexpr auto &operator[](std::size_t i) noexcept { - return start()[i]; + if (std::is_constant_evaluated()) { + switch (i) { + case 0: + return x; + case 1: + return y; + default: + oxAssert(false, "Read past end of Vec2"); + return y; + } + } else { + return start()[i]; + } } constexpr const auto &operator[](std::size_t i) const noexcept { - return start()[i]; + if (std::is_constant_evaluated()) { + switch (i) { + case 0: + return x; + case 1: + return y; + default: + oxAssert(false, "Read past end of Vec2"); + return y; + } + } else { + return start()[i]; + } } constexpr auto operator==(const Vec &v) const noexcept {