[Libreoffice-commits] core.git: include/vcl
Stephan Bergmann
sbergman at redhat.com
Fri Sep 4 02:56:04 PDT 2015
include/vcl/vclptr.hxx | 15 +++++++++++++++
1 file changed, 15 insertions(+)
New commits:
commit 5fba3a9a0022c3647d098c00ea63593bd1e78e65
Author: Stephan Bergmann <sbergman at redhat.com>
Date: Fri Sep 4 11:51:40 2015 +0200
Prevent perfect forwarding ctor from hijacking copy construction attempts
...and hope that this will already be enough to help MSVC 2015 re.
<http://paste.openstack.org/show/444734/>.
"This leads to beavior that's intuitive only if you've spent so much time around
compilers and compiler-writers, you've forgotten what it's like to be human," as
Meyers so aptly put it.
Change-Id: I4015bf831cd4cfed6988cc3517f719b756e27bb8
diff --git a/include/vcl/vclptr.hxx b/include/vcl/vclptr.hxx
index b188724..407db34 100644
--- a/include/vcl/vclptr.hxx
+++ b/include/vcl/vclptr.hxx
@@ -371,6 +371,21 @@ public:
: ScopedVclPtr<reference_type>( new reference_type(std::forward<Arg>(arg)...), SAL_NO_ACQUIRE )
{
}
+
+private:
+ // Prevent the above perfect forwarding ctor from hijacking (accidental)
+ // attempts at ScopedVclPtrInstance copy construction (where the hijacking
+ // would typically lead to somewhat obscure error messages); both non-const
+ // and const variants are needed here, as the ScopedVclPtr base class has a
+ // const--variant copy ctor, so the implicitly declared copy ctor for
+ // ScopedVclPtrInstance would also be the const variant, so non-const copy
+ // construction attempts would be hijacked by the perfect forwarding ctor;
+ // but if we only declared a non-const variant here, the const variant would
+ // no longer be implicitly declared (as there would already be an explicitly
+ // declared copy ctor), so const copy construction attempts would then be
+ // hijacked by the perfect forwarding ctor:
+ ScopedVclPtrInstance(ScopedVclPtrInstance &) = delete;
+ ScopedVclPtrInstance(ScopedVclPtrInstance const &) = delete;
};
#endif // INCLUDED_VCL_PTR_HXX
More information about the Libreoffice-commits
mailing list