diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2016-05-03 15:19:21 +0200 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2016-05-03 15:25:44 +0200 |
commit | ab3d2e568fe1595584c66c2ff07843e72f608944 (patch) | |
tree | f8490f9286c1cb3012c74743a864d6d9bb4ce7e4 /include | |
parent | 2ce95e838260ed1e7e64ac8f5662aa2e2234ab9e (diff) |
Prevent Any ctor from reinterpreting bool* as sal_Bool*
...which only happens to work in environments where sizeof (bool) == 1. The
simpler alternative is to use the Any ctor template without passing explicit UNO
type information, anyway.
The std::nullptr_t overloads are needed to disambiguate calls with a nullptr
argument. (Which can at least be meaningful for VOID, but for other types what
it happens to do is store a default value of the given type.) As std::nullptr_t
is only C++11, this all needs to be LIBO_INTERNAL_ONLY.
Change-Id: I0f72c73a088ef96e069c3ed8c78546b16d89b50a
Diffstat (limited to 'include')
-rw-r--r-- | include/com/sun/star/uno/Any.h | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/include/com/sun/star/uno/Any.h b/include/com/sun/star/uno/Any.h index ad26da1cbf64..c46a59e2f0cc 100644 --- a/include/com/sun/star/uno/Any.h +++ b/include/com/sun/star/uno/Any.h @@ -19,6 +19,10 @@ #ifndef INCLUDED_COM_SUN_STAR_UNO_ANY_H #define INCLUDED_COM_SUN_STAR_UNO_ANY_H +#include <sal/config.h> + +#include <cstddef> + #include <uno/any2.h> #include <typelib/typedescription.h> #include <cppu/unotype.hxx> @@ -101,6 +105,18 @@ public: */ inline Any( const void * pData_, typelib_TypeDescriptionReference * pType_ ); +#if defined LIBO_INTERNAL_ONLY + Any(bool const *, Type const &) = delete; + Any(bool const *, typelib_TypeDescription *) = delete; + Any(bool const *, typelib_TypeDescriptionReference *) = delete; + Any(std::nullptr_t, Type const & type): + Any(static_cast<void *>(nullptr), type) {} + Any(std::nullptr_t, typelib_TypeDescription * type): + Any(static_cast<void *>(nullptr), type) {} + Any(std::nullptr_t, typelib_TypeDescriptionReference * type): + Any(static_cast<void *>(nullptr), type) {} +#endif + /** Destructor: Destructs any content and frees memory. */ inline ~Any(); |