C++ needs casts in order to assign a void* to another pointer type. As
typeof operator is a gcc extension, we define EINA_TYPEOF(x) as "typeof"
on gcc with c++ source and as nothing otherwise.
---
 src/include/eina_list.h |   16 +++++++++++-----
 1 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/src/include/eina_list.h b/src/include/eina_list.h
index 5088c44..caf237b 100644
--- a/src/include/eina_list.h
+++ b/src/include/eina_list.h
@@ -19,6 +19,12 @@
 #ifndef EINA_LIST_H_
 #define EINA_LIST_H_
 
+#if !defined(_MSC_VER) && defined(__cplusplus)
+#define EINA_TYPEOF(x) (__typeof__(x))
+#else
+#define EINA_TYPEOF(x)
+#endif
+
 #include <stdlib.h>
 
 #include "eina_config.h"
@@ -156,7 +162,7 @@ EAPI Eina_Accessor *eina_list_accessor_new(const Eina_List 
*list) EINA_MALLOC EI
  *          For destructive operations such as this, consider
  *          using EINA_LIST_FOREACH_SAFE().
  */
-#define EINA_LIST_FOREACH(list, l, data) for (l = list, data = 
eina_list_data_get(l); l; l = eina_list_next(l), data = eina_list_data_get(l))
+#define EINA_LIST_FOREACH(list, l, data) for (l = list, data = 
EINA_TYPEOF(data)eina_list_data_get(l); l; l = eina_list_next(l), data = 
EINA_TYPEOF(data)eina_list_data_get(l))
 
 /**
  * @def EINA_LIST_REVERSE_FOREACH
@@ -199,7 +205,7 @@ EAPI Eina_Accessor *eina_list_accessor_new(const Eina_List 
*list) EINA_MALLOC EI
  *          For destructive operations such as this, consider
  *          using EINA_LIST_REVERSE_FOREACH_SAFE().
  */
-#define EINA_LIST_REVERSE_FOREACH(list, l, data) for (l = 
eina_list_last(list), data = eina_list_data_get(l); l; l = eina_list_prev(l), 
data = eina_list_data_get(l))
+#define EINA_LIST_REVERSE_FOREACH(list, l, data) for (l = 
eina_list_last(list), data = EINA_TYPEOF(data)eina_list_data_get(l); l; l = 
eina_list_prev(l), data = EINA_TYPEOF(data)eina_list_data_get(l))
 
 /**
  * @def EINA_LIST_FOREACH_SAFE
@@ -236,7 +242,7 @@ EAPI Eina_Accessor *eina_list_accessor_new(const Eina_List 
*list) EINA_MALLOC EI
  *   }
  * @endcode
  */
-#define EINA_LIST_FOREACH_SAFE(list, l, l_next, data) for (l = list, l_next = 
eina_list_next(l), data = eina_list_data_get(l); l; l = l_next, l_next = 
eina_list_next(l), data = eina_list_data_get(l))
+#define EINA_LIST_FOREACH_SAFE(list, l, l_next, data) for (l = list, l_next = 
eina_list_next(l), data = EINA_TYPEOF(data)eina_list_data_get(l); l; l = 
l_next, l_next = eina_list_next(l), data = 
EINA_TYPEOF(data)eina_list_data_get(l))
 
 /**
  * @def EINA_LIST_REVERSE_FOREACH_SAFE
@@ -275,7 +281,7 @@ EAPI Eina_Accessor *eina_list_accessor_new(const Eina_List 
*list) EINA_MALLOC EI
  *   }
  * @endcode
  */
-#define EINA_LIST_REVERSE_FOREACH_SAFE(list, l, l_prev, data) for (l = 
eina_list_last(list), l_prev = eina_list_prev(l), data = eina_list_data_get(l); 
l; l = l_prev, l_prev = eina_list_prev(l), data = eina_list_data_get(l))
+#define EINA_LIST_REVERSE_FOREACH_SAFE(list, l, l_prev, data) for (l = 
eina_list_last(list), l_prev = eina_list_prev(l), data = 
EINA_TYPEOF(data)eina_list_data_get(l); l; l = l_prev, l_prev = 
eina_list_prev(l), data = EINA_TYPEOF(data)eina_list_data_get(l))
 
 /**
  * @def EINA_LIST_FREE
@@ -302,7 +308,7 @@ EAPI Eina_Accessor *eina_list_accessor_new(const Eina_List 
*list) EINA_MALLOC EI
  *
  * @see eina_list_free()
  */
-#define EINA_LIST_FREE(list, data) for (data = eina_list_data_get(list); list; 
list = eina_list_remove_list(list, list), data = eina_list_data_get(list))
+#define EINA_LIST_FREE(list, data) for (data = 
EINA_TYPEOF(data)eina_list_data_get(list); list; list = 
eina_list_remove_list(list, list), data = 
EINA_TYPEOF(data)eina_list_data_get(list))
 
 #include "eina_inline_list.x"
 
-- 
1.7.0


------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to