In zend.h, ZSTR is defined like this: typedef union _zstr { char *s; UChar *u; void *v; } zstr;
#ifdef __GNUC__ # define ZSTR(x) ((zstr)(x)) # define NULL_ZSTR ZSTR((void*)NULL) # define EMPTY_ZSTR ZSTR("\0\0") #else extern ZEND_API zstr null_zstr; extern ZEND_API zstr empty_zstr; static inline zstr _to_zstr(void *v) { zstr ret; ret.v = v; return ret; } # define ZSTR(x) _to_zstr(x) # define NULL_ZSTR null_zstr # define EMPTY_ZSTR empty_zstr #endif The problem is that g++ is also __GNUC__ and I just can't get g++ to compile a code like this: char *c="I am not working!"; zstr z = ZSTR(c); So I found at gcc.gnu.org that the "Cast to Union" GNU extension is just for C not C++, here is the patch to the current CVS: Index: Zend/zend.h =================================================================== RCS file: /repository/ZendEngine2/zend.h,v retrieving revision 1.316 diff -u -u -r1.316 zend.h --- Zend/zend.h 3 Mar 2006 09:56:47 -0000 1.316 +++ Zend/zend.h 13 Mar 2006 23:29:45 -0000 @@ -246,7 +246,7 @@ void *v; } zstr; -#ifdef __GNUC__ +#if defined(__GNUC__) && ! defined(__GNUG__) # define ZSTR(x) ((zstr)(x)) # define NULL_ZSTR ZSTR((void*)NULL) # define EMPTY_ZSTR ZSTR("\0\0") Regards, Cristiano Duarte -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php