Просмотр исходного кода

cm::optional: Suppress GCC -Wmaybe-uninitialized false positive

Kyle Edwards 1 месяц назад
Родитель
Сommit
8cca26e562
1 измененных файлов с 10 добавлено и 1 удалено
  1. 10 1
      Utilities/std/cm/optional

+ 10 - 1
Utilities/std/cm/optional

@@ -12,6 +12,9 @@
 #if defined(CMake_HAVE_CXX_OPTIONAL)
 #  include <optional> // IWYU pragma: export
 #else
+#  if defined(__GNUC__) && !defined(__clang__)
+#    include <cstring>
+#  endif
 #  include <memory>
 
 #  include <cm/utility>
@@ -121,7 +124,13 @@ private:
     T value;
 
     // Explicit constructor and destructor is required to make this work
-    _mem_union() noexcept {}
+    _mem_union() noexcept
+    {
+#  if defined(__GNUC__) && !defined(__clang__)
+      // Some versions of GCC complain about uninitialized memory
+      std::memset(this, 0, sizeof(*this));
+#  endif
+    }
     ~_mem_union() noexcept {}
   } _mem;
 };