summaryrefslogtreecommitdiff
path: root/include/tools/ref.hxx
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2017-04-21 16:35:19 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2017-04-22 22:05:13 +0200
commit4d12bbef79b26d2c371d3b968690b46717c31045 (patch)
treee826842515a31d1fa39d1893a4d18fc01138981e /include/tools/ref.hxx
parent42b40ede8c496aad1021e68a72523af4f57e89f6 (diff)
revert bits of "remove some old MSVC workarounds"
in commit 841e1a6f3619054ecc9240e061cd83d4e41d1ca9, since MSVC 2015 still does not pack heterogenous bitfields tightly Change-Id: I251c797492762cbd2381496b2f2c6c3223d563c6 Reviewed-on: https://gerrit.libreoffice.org/36800 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'include/tools/ref.hxx')
-rw-r--r--include/tools/ref.hxx11
1 files changed, 6 insertions, 5 deletions
diff --git a/include/tools/ref.hxx b/include/tools/ref.hxx
index 5116c73bd5b5..bb32d486339e 100644
--- a/include/tools/ref.hxx
+++ b/include/tools/ref.hxx
@@ -122,21 +122,22 @@ class TOOLS_DLLPUBLIC SvRefBase
// work around a clang 3.5 optimization bug: if the bNoDelete is *first*
// it mis-compiles "if (--nRefCount == 0)" and never deletes any object
unsigned int nRefCount : 31;
- bool bNoDelete : 1;
+ // the only reason this is not bool is because MSVC cannot handle mixed type bitfields
+ unsigned int bNoDelete : 1;
protected:
virtual ~SvRefBase();
public:
- SvRefBase() : nRefCount(0), bNoDelete(true) {}
+ SvRefBase() : nRefCount(0), bNoDelete(1) {}
- SvRefBase(const SvRefBase &) : nRefCount(0), bNoDelete(true) {}
+ SvRefBase(const SvRefBase &) : nRefCount(0), bNoDelete(1) {}
SvRefBase & operator = ( const SvRefBase & )
{ return *this; }
void RestoreNoDelete()
- { bNoDelete = true; }
+ { bNoDelete = 1; }
void AddNextRef()
{
@@ -148,7 +149,7 @@ public:
{
assert( nRefCount < (1 << 30) && "Do not add refs to dead objects" );
if( bNoDelete )
- bNoDelete = false;
+ bNoDelete = 0;
++nRefCount;
}