From fe7edd7b6397a17835c528a121a189634ff20bed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Mon, 5 Dec 2022 10:32:32 +0100 Subject: [PATCH] Trade: C++, are you telling me that I can't do `-sizeof(foo)`?? This language is just amazing. What the hell. --- src/Magnum/Trade/Test/SceneDataTest.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/Magnum/Trade/Test/SceneDataTest.cpp b/src/Magnum/Trade/Test/SceneDataTest.cpp index ac6ef2f8c..316d3e34d 100644 --- a/src/Magnum/Trade/Test/SceneDataTest.cpp +++ b/src/Magnum/Trade/Test/SceneDataTest.cpp @@ -950,14 +950,18 @@ void SceneDataTest::constructFieldStringNegativeStride() { /* Testing only the properties related to the stride/offset unpack */ CORRADE_COMPARE(names.fieldData().size(), 3); - CORRADE_COMPARE(names.fieldData().stride(), -sizeof(UnsignedInt)); + /* Uhh C++ WHAT THE HELL? "error C4146: unary minus operator applied to + unsigned type, result still unsigned" */ + CORRADE_COMPARE(names.fieldData().stride(), -std::ptrdiff_t(sizeof(UnsignedInt))); CORRADE_COMPARE(names.fieldData().data(), data.nameField + 2); CORRADE_COMPARE(names.stringData(), static_cast(data.nameString)); /* This is a separate code path, but should do the same */ char someArray[3*sizeof(UnsignedLong)]; CORRADE_COMPARE(names.fieldData(someArray).size(), 3); - CORRADE_COMPARE(names.fieldData(someArray).stride(), -sizeof(UnsignedInt)); + /* Uhh C++ WHAT THE HELL? "error C4146: unary minus operator applied to + unsigned type, result still unsigned" */ + CORRADE_COMPARE(names.fieldData(someArray).stride(), -std::ptrdiff_t(sizeof(UnsignedInt))); CORRADE_COMPARE(names.fieldData(someArray).data(), data.nameField + 2); CORRADE_COMPARE(names.stringData(someArray), static_cast(data.nameString)); } @@ -1161,7 +1165,9 @@ void SceneDataTest::constructFieldOffsetOnlyStringNegativeStride() { CORRADE_COMPARE(a.fieldType(), SceneFieldType::StringRangeNullTerminated16); CORRADE_COMPARE(a.fieldArraySize(), 0); CORRADE_COMPARE(a.fieldData(data).size(), 2); - CORRADE_COMPARE(a.fieldData(data).stride(), -sizeof(Data)); + /* Uhh C++ WHAT THE HELL? "error C4146: unary minus operator applied to + unsigned type, result still unsigned" */ + CORRADE_COMPARE(a.fieldData(data).stride(), -std::ptrdiff_t(sizeof(Data))); /* Order flipped compared to constructFieldOffsetOnlyString() */ auto fieldData = Containers::arrayCast(a.fieldData(data));