Skip to content

Commit 9c1dc2a

Browse files
authored
Fix C++20 comparisons for XNFLOAT{3,4}X{3,4} (#303)
1 parent 2b3b3f4 commit 9c1dc2a

1 file changed

Lines changed: 91 additions & 8 deletions

File tree

Inc/DirectXMath.h

Lines changed: 91 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -865,8 +865,25 @@ namespace DirectX
865865
float& operator() (size_t Row, size_t Column) noexcept { return m[Row][Column]; }
866866

867867
#if (__cplusplus >= 202002L)
868-
bool operator == (const XMFLOAT3X3&) const = default;
869-
auto operator <=> (const XMFLOAT3X3&) const = default;
868+
bool operator == (const XMFLOAT3X3& M) const noexcept
869+
{
870+
return _11 == M._11 && _12 == M._12 && _13 == M._13
871+
&& _21 == M._21 && _22 == M._22 && _23 == M._23
872+
&& _31 == M._31 && _32 == M._32 && _33 == M._33;
873+
}
874+
875+
auto operator <=> (const XMFLOAT3X3& M) const noexcept
876+
{
877+
if (auto cmp = _11 <=> M._11; cmp != 0) return cmp;
878+
if (auto cmp = _12 <=> M._12; cmp != 0) return cmp;
879+
if (auto cmp = _13 <=> M._13; cmp != 0) return cmp;
880+
if (auto cmp = _21 <=> M._21; cmp != 0) return cmp;
881+
if (auto cmp = _22 <=> M._22; cmp != 0) return cmp;
882+
if (auto cmp = _23 <=> M._23; cmp != 0) return cmp;
883+
if (auto cmp = _31 <=> M._31; cmp != 0) return cmp;
884+
if (auto cmp = _32 <=> M._32; cmp != 0) return cmp;
885+
return _33 <=> M._33;
886+
}
870887
#endif
871888
};
872889

@@ -910,8 +927,29 @@ namespace DirectX
910927
float& operator() (size_t Row, size_t Column) noexcept { return m[Row][Column]; }
911928

912929
#if (__cplusplus >= 202002L)
913-
bool operator == (const XMFLOAT4X3&) const = default;
914-
auto operator <=> (const XMFLOAT4X3&) const = default;
930+
bool operator == (const XMFLOAT4X3& M) const noexcept
931+
{
932+
return _11 == M._11 && _12 == M._12 && _13 == M._13
933+
&& _21 == M._21 && _22 == M._22 && _23 == M._23
934+
&& _31 == M._31 && _32 == M._32 && _33 == M._33
935+
&& _41 == M._41 && _42 == M._42 && _43 == M._43;
936+
}
937+
938+
auto operator <=> (const XMFLOAT4X3& M) const noexcept
939+
{
940+
if (auto cmp = _11 <=> M._11; cmp != 0) return cmp;
941+
if (auto cmp = _12 <=> M._12; cmp != 0) return cmp;
942+
if (auto cmp = _13 <=> M._13; cmp != 0) return cmp;
943+
if (auto cmp = _21 <=> M._21; cmp != 0) return cmp;
944+
if (auto cmp = _22 <=> M._22; cmp != 0) return cmp;
945+
if (auto cmp = _23 <=> M._23; cmp != 0) return cmp;
946+
if (auto cmp = _31 <=> M._31; cmp != 0) return cmp;
947+
if (auto cmp = _32 <=> M._32; cmp != 0) return cmp;
948+
if (auto cmp = _33 <=> M._33; cmp != 0) return cmp;
949+
if (auto cmp = _41 <=> M._41; cmp != 0) return cmp;
950+
if (auto cmp = _42 <=> M._42; cmp != 0) return cmp;
951+
return _43 <=> M._43;
952+
}
915953
#endif
916954
};
917955

@@ -958,8 +996,28 @@ namespace DirectX
958996
float& operator() (size_t Row, size_t Column) noexcept { return m[Row][Column]; }
959997

960998
#if (__cplusplus >= 202002L)
961-
bool operator == (const XMFLOAT3X4&) const = default;
962-
auto operator <=> (const XMFLOAT3X4&) const = default;
999+
bool operator == (const XMFLOAT3X4& M) const noexcept
1000+
{
1001+
return _11 == M._11 && _12 == M._12 && _13 == M._13 && _14 == M._14
1002+
&& _21 == M._21 && _22 == M._22 && _23 == M._23 && _24 == M._24
1003+
&& _31 == M._31 && _32 == M._32 && _33 == M._33 && _34 == M._34;
1004+
}
1005+
1006+
auto operator <=> (const XMFLOAT3X4& M) const noexcept
1007+
{
1008+
if (auto cmp = _11 <=> M._11; cmp != 0) return cmp;
1009+
if (auto cmp = _12 <=> M._12; cmp != 0) return cmp;
1010+
if (auto cmp = _13 <=> M._13; cmp != 0) return cmp;
1011+
if (auto cmp = _14 <=> M._14; cmp != 0) return cmp;
1012+
if (auto cmp = _21 <=> M._21; cmp != 0) return cmp;
1013+
if (auto cmp = _22 <=> M._22; cmp != 0) return cmp;
1014+
if (auto cmp = _23 <=> M._23; cmp != 0) return cmp;
1015+
if (auto cmp = _24 <=> M._24; cmp != 0) return cmp;
1016+
if (auto cmp = _31 <=> M._31; cmp != 0) return cmp;
1017+
if (auto cmp = _32 <=> M._32; cmp != 0) return cmp;
1018+
if (auto cmp = _33 <=> M._33; cmp != 0) return cmp;
1019+
return _34 <=> M._34;
1020+
}
9631021
#endif
9641022
};
9651023

@@ -1008,8 +1066,33 @@ namespace DirectX
10081066
float& operator() (size_t Row, size_t Column) noexcept { return m[Row][Column]; }
10091067

10101068
#if (__cplusplus >= 202002L)
1011-
bool operator == (const XMFLOAT4X4&) const = default;
1012-
auto operator <=> (const XMFLOAT4X4&) const = default;
1069+
bool operator == (const XMFLOAT4X4& M) const noexcept
1070+
{
1071+
return _11 == M._11 && _12 == M._12 && _13 == M._13 && _14 == M._14
1072+
&& _21 == M._21 && _22 == M._22 && _23 == M._23 && _24 == M._24
1073+
&& _31 == M._31 && _32 == M._32 && _33 == M._33 && _34 == M._34
1074+
&& _41 == M._41 && _42 == M._42 && _43 == M._43 && _44 == M._44;
1075+
}
1076+
1077+
auto operator <=> (const XMFLOAT4X4& M) const noexcept
1078+
{
1079+
if (auto cmp = _11 <=> M._11; cmp != 0) return cmp;
1080+
if (auto cmp = _12 <=> M._12; cmp != 0) return cmp;
1081+
if (auto cmp = _13 <=> M._13; cmp != 0) return cmp;
1082+
if (auto cmp = _14 <=> M._14; cmp != 0) return cmp;
1083+
if (auto cmp = _21 <=> M._21; cmp != 0) return cmp;
1084+
if (auto cmp = _22 <=> M._22; cmp != 0) return cmp;
1085+
if (auto cmp = _23 <=> M._23; cmp != 0) return cmp;
1086+
if (auto cmp = _24 <=> M._24; cmp != 0) return cmp;
1087+
if (auto cmp = _31 <=> M._31; cmp != 0) return cmp;
1088+
if (auto cmp = _32 <=> M._32; cmp != 0) return cmp;
1089+
if (auto cmp = _33 <=> M._33; cmp != 0) return cmp;
1090+
if (auto cmp = _34 <=> M._34; cmp != 0) return cmp;
1091+
if (auto cmp = _41 <=> M._41; cmp != 0) return cmp;
1092+
if (auto cmp = _42 <=> M._42; cmp != 0) return cmp;
1093+
if (auto cmp = _43 <=> M._43; cmp != 0) return cmp;
1094+
return _44 <=> M._44;
1095+
}
10131096
#endif
10141097
};
10151098

0 commit comments

Comments
 (0)