From 8729e23f2dc245d7c73d98262d3b651b7c284249 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20T=C3=B6nne?= Date: Fri, 11 Dec 2015 16:16:11 +0100 Subject: 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. --- source/blender/bmesh/bmesh_class.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/source/blender/bmesh/bmesh_class.h b/source/blender/bmesh/bmesh_class.h index 16e8285902a..4ffa0bda71a 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 { -- cgit v1.2.3