diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2018-01-23 11:06:22 +0100 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2018-01-23 19:54:06 +0100 |
commit | ad9871a5d1119593068f7e3a01d4249b4dff982a (patch) | |
tree | 70edfa451e9b739b3d01d5ad354c4bd8846b1ba0 /include/basic | |
parent | 429072614e3c1d4bc0f9ca706414a43040464fe4 (diff) |
Introduce SbxValues::clear
...to avoid upcoming GCC 8 -Werror=class-memaccess ("clearing an object of non-
trivial type ‘struct SbxValues’")
Change-Id: Icf610e692b81030bfd6f2f940c43ee8bf6f1d4e0
Reviewed-on: https://gerrit.libreoffice.org/48389
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
Diffstat (limited to 'include/basic')
-rw-r--r-- | include/basic/sbxvar.hxx | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/include/basic/sbxvar.hxx b/include/basic/sbxvar.hxx index b189d4e32c26..1908ce83b73e 100644 --- a/include/basic/sbxvar.hxx +++ b/include/basic/sbxvar.hxx @@ -24,6 +24,9 @@ #include <com/sun/star/bridge/oleautomation/Decimal.hpp> #include <basic/sbxcore.hxx> #include <basic/basicdllapi.h> + +#include <cstddef> +#include <cstring> #include <memory> @@ -71,6 +74,15 @@ struct SbxValues SbxValues(): pData( nullptr ), eType(SbxEMPTY) {} SbxValues( SbxDataType e ): eType(e) {} SbxValues( double _nDouble ): nDouble( _nDouble ), eType(SbxDOUBLE) {} + + void clear(SbxDataType type) { + // A hacky way of zeroing the union value corresponding to the given type (even though the + // relevant zero value need not be represented by all-zero bits, in general) without evoking + // GCC 8 -Wclass-memaccess, and without having to turn the anonymous union into a non- + // anonymous one: + std::memset(static_cast<void *>(this), 0, offsetof(SbxValues, eType)); + eType = type; + } }; class BASIC_DLLPUBLIC SbxValue : public SbxBase |