[Bf-blender-cvs] [8729e23] master: Fix for invalid void* to typed pointer assignment in bmesh when used in C++ code.

Lukas Tönne noreply at git.blender.org
Fri Dec 11 16:23:57 CET 2015


Commit: 8729e23f2dc245d7c73d98262d3b651b7c284249
Author: Lukas Tönne
Date:   Fri Dec 11 16:16:11 2015 +0100
Branches: master
https://developer.blender.org/rB8729e23f2dc245d7c73d98262d3b651b7c284249

Fix for invalid void* to typed pointer assignment in bmesh when used in C++ code.

C++ does not allow the assignment of a void pointer to a typed pointer without
explicit casting. Since we use a generic macro in bmesh for iterators we only
ever get a void* back and cannot cast it to the target type. However, casting
the target to a void* as well solves that issue.

This tweak is #ifdef'd to be used in C++ code only.

===================================================================

M	source/blender/bmesh/bmesh_class.h

===================================================================

diff --git a/source/blender/bmesh/bmesh_class.h b/source/blender/bmesh/bmesh_class.h
index 16e8285..4ffa0bd 100644
--- a/source/blender/bmesh/bmesh_class.h
+++ b/source/blender/bmesh/bmesh_class.h
@@ -276,8 +276,16 @@ enum {
 #define BM_CHECK_TYPE_ELEM(ele) \
 	CHECK_TYPE_ANY(ele, _BM_GENERIC_TYPE_ELEM_NONCONST, _BM_GENERIC_TYPE_ELEM_CONST)
 
+/* Assignment from a void* to a typed pointer is not allowed in C++,
+ * casting the LHS to void works fine though.
+ */
+#ifdef __cplusplus
+#define BM_CHECK_TYPE_ELEM_ASSIGN(ele) \
+	(BM_CHECK_TYPE_ELEM(ele)), *((void **)&ele)
+#else
 #define BM_CHECK_TYPE_ELEM_ASSIGN(ele) \
 	(BM_CHECK_TYPE_ELEM(ele)), ele
+#endif
 
 /* BMHeader->hflag (char) */
 enum {




More information about the Bf-blender-cvs mailing list