Actually use enable_if correctly

This commit is contained in:
mniip 2023-02-23 22:26:30 +01:00
parent 984b67eb96
commit 433615ff0d
2 changed files with 21 additions and 21 deletions

View File

@ -4,10 +4,10 @@
#include <utility>
#include <type_traits>
template<typename T, typename = std::enable_if<std::is_arithmetic_v<T>, void>>
template<typename T, typename = std::enable_if_t<std::is_arithmetic_v<T>>>
struct Rect;
template<typename T, typename = std::enable_if<std::is_arithmetic_v<T>, void>>
template<typename T, typename = std::enable_if_t<std::is_arithmetic_v<T>>>
struct Vec2
{
T X, Y;
@ -18,7 +18,7 @@ struct Vec2
{
}
template<typename S, typename = std::enable_if<std::is_constructible_v<T, S>, void>>
template<typename S, typename = std::enable_if_t<std::is_constructible_v<T, S>>>
constexpr explicit Vec2(Vec2<S> other):
X(other.X),
Y(other.Y)
@ -52,13 +52,13 @@ struct Vec2
return Vec2<decltype(std::declval<T>() - std::declval<S>())>(X - other.X, Y - other.Y);
}
template<typename S, typename = std::enable_if<std::is_arithmetic_v<S>, void>>
template<typename S, typename = std::enable_if_t<std::is_arithmetic_v<S>>>
constexpr inline Vec2<decltype(std::declval<T>() * std::declval<S>())> operator*(S other) const
{
return Vec2<decltype(std::declval<T>() * std::declval<S>())>(X * other, Y * other);
}
template<typename S, typename = std::enable_if<std::is_arithmetic_v<S>, void>>
template<typename S, typename = std::enable_if_t<std::is_arithmetic_v<S>>>
constexpr inline Vec2<decltype(std::declval<T>() / std::declval<S>())> operator/(S other) const
{
return Vec2<decltype(std::declval<T>() / std::declval<S>())>(X / other, Y / other);
@ -94,7 +94,7 @@ struct Vec2
}
// Return a rectangle starting at origin, whose dimensions match this vector
template<typename = std::enable_if<std::is_integral_v<T>, void>>
template<typename S = T, typename = std::enable_if_t<std::is_integral_v<S>>>
constexpr inline Rect<T> OriginRect() const
{
return RectSized(Vec2<T>(0, 0), *this);
@ -106,7 +106,7 @@ struct Vec2
template<typename T, typename V>
Vec2<T> Vec2<T, V>::Zero = Vec2<T>(0, 0);
template<typename T, typename = std::enable_if<std::is_arithmetic_v<T>, void>>
template<typename T, typename = std::enable_if_t<std::is_arithmetic_v<T>>>
struct Mat2
{
// ⎛A B⎞
@ -149,7 +149,7 @@ Mat2<T> Mat2<T, V>::MirrorY = Mat2<T>(1, 0, 0, -1);
template<typename T, typename V>
Mat2<T> Mat2<T, V>::CCW = Mat2<T>(0, 1, -1, 0); // reminder: the Y axis points down
template<typename T, typename = std::enable_if<std::is_arithmetic_v<T>, void>>
template<typename T, typename = std::enable_if_t<std::is_arithmetic_v<T>>>
constexpr static inline Rect<T> RectBetween(Vec2<T>, Vec2<T>);
template<typename T, typename>
@ -236,7 +236,7 @@ public:
return point.X >= TopLeft.X && point.X <= BottomRight.X && point.Y >= TopLeft.Y && point.Y <= BottomRight.Y;
}
template<typename = std::enable_if<std::is_integral_v<T>, void>>
template<typename S = T, typename = std::enable_if_t<std::is_integral_v<S>>>
inline Vec2<T> Size() const
{
return BottomRight - TopLeft + Vec2<T>(1, 1);
@ -259,13 +259,13 @@ constexpr static inline Rect<T> RectBetween(Vec2<T> topLeft, Vec2<T> bottomRight
return Rect<T>(topLeft, bottomRight);
}
template<typename T, typename = std::enable_if<std::is_arithmetic_v<T>, void>>
template<typename T, typename = std::enable_if_t<std::is_arithmetic_v<T>>>
static inline Rect<T> RectAt(Vec2<T> pos)
{
return RectBetween<T>(pos, pos);
}
template<typename T, typename = std::enable_if<std::is_integral_v<T>, void>>
template<typename T, typename = std::enable_if_t<std::is_integral_v<T>>>
constexpr static inline Rect<T> RectSized(Vec2<T> topLeft, Vec2<T> dimen)
{
return RectBetween<T>(topLeft, topLeft + dimen - Vec2<T>(1, 1));

View File

@ -32,11 +32,11 @@ constexpr int PIXB(pixel x)
return x & 0xFF;
}
template<typename T, typename = std::enable_if<std::is_arithmetic_v<T>, void>>
template<typename T, typename = std::enable_if_t<std::is_arithmetic_v<T>>>
class RGBA;
template<typename T, typename = std::enable_if<std::is_arithmetic_v<T>, void>>
struct alignas(std::min(alignof(uint32_t), alignof(T))) RGB
template<typename T, typename = std::enable_if_t<std::is_arithmetic_v<T>>>
struct alignas(alignof(uint32_t) > alignof(T) ? alignof(uint32_t) : alignof(T)) RGB
{
T Blue, Green, Red;
@ -50,7 +50,7 @@ struct alignas(std::min(alignof(uint32_t), alignof(T))) RGB
template<typename S> // Avoid referring to the non-intuitive order of components
RGB(std::initializer_list<S>) = delete;
template<typename = std::enable_if<std::is_same_v<T, uint8_t>, void>>
template<typename S = T, typename = std::enable_if_t<std::is_same_v<S, uint8_t>>>
inline RGB<T> Blend(RGBA<T> other) const
{
if (other.Alpha == 0xFF)
@ -63,7 +63,7 @@ struct alignas(std::min(alignof(uint32_t), alignof(T))) RGB
);
}
template<typename = std::enable_if<std::is_same_v<T, uint8_t>, void>>
template<typename S = T, typename = std::enable_if_t<std::is_same_v<S, uint8_t>>>
inline RGB<T> Add(RGBA<T> other) const
{
return RGB<T>(
@ -73,7 +73,7 @@ struct alignas(std::min(alignof(uint32_t), alignof(T))) RGB
);
}
template<typename = std::enable_if<std::is_same_v<T, uint8_t>, void>>
template<typename S = T, typename = std::enable_if_t<std::is_same_v<S, uint8_t>>>
inline RGB<T> Inverse() const
{
return RGB<T>(0xFF - Red, 0xFF - Green, 0xFF - Blue);
@ -84,13 +84,13 @@ struct alignas(std::min(alignof(uint32_t), alignof(T))) RGB
return RGBA<T>(Red, Green, Blue, a);
}
template<typename = std::enable_if<std::is_same_v<T, uint8_t>, void>>
template<typename S = T, typename = std::enable_if_t<std::is_same_v<S, uint8_t>>>
inline pixel Pack() const
{
return PIXRGB(Red, Green, Blue);
}
template<typename = std::enable_if<std::is_same_v<T, uint8_t>, void>>
template<typename S = T, typename = std::enable_if_t<std::is_same_v<S, uint8_t>>>
static inline RGB<T> Unpack(pixel px)
{
return RGB<T>(PIXR(px), PIXG(px), PIXB(px));
@ -98,7 +98,7 @@ struct alignas(std::min(alignof(uint32_t), alignof(T))) RGB
};
template<typename T, typename>
struct alignas(std::min(alignof(uint32_t), alignof(T))) RGBA
struct alignas(alignof(uint32_t) > alignof(T) ? alignof(uint32_t) : alignof(T)) RGBA
{
T Blue, Green, Red, Alpha;
@ -110,7 +110,7 @@ struct alignas(std::min(alignof(uint32_t), alignof(T))) RGBA
{
}
template<typename = std::enable_if<std::is_same_v<T, uint8_t>, void>>
template<typename S = T, typename = std::enable_if_t<std::is_same_v<S, uint8_t>>>
RGBA(T r, T g, T b):
Blue(b),
Green(g),