forked from minhngoc25a/freetype2
Fix type-punning issues with C++.
* include/freetype/internal/ftmemory.h (FT_ASSIGNP) [__cplusplus]: Emulate a `typeof' operator with an inline template which uses `static_cast'.
This commit is contained in:
parent
7fa49cee58
commit
f4e6c155f0
10
ChangeLog
10
ChangeLog
|
@ -1,9 +1,17 @@
|
|||
2010-07-12 malc <av1474@comtv.ru>
|
||||
|
||||
Fix type-punning issues with C++.
|
||||
|
||||
* include/freetype/internal/ftmemory.h (FT_ASSIGNP) [__cplusplus]:
|
||||
Emulate a `typeof' operator with an inline template which uses
|
||||
`static_cast'.
|
||||
|
||||
2010-07-11 Werner Lemberg <wl@gnu.org>
|
||||
|
||||
Fix C++ compilation issue.
|
||||
|
||||
* src/tools/apinames.c (names_dump) <OUTPUT_WATCOM_LBC>: Fix
|
||||
typo of `dot' variable.
|
||||
type of `dot' variable.
|
||||
|
||||
2010-07-10 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
/* */
|
||||
/* The FreeType memory management macros (specification). */
|
||||
/* */
|
||||
/* Copyright 1996-2001, 2002, 2004, 2005, 2006, 2007 by */
|
||||
/* Copyright 1996-2001, 2002, 2004, 2005, 2006, 2007, 2010 by */
|
||||
/* David Turner, Robert Wilhelm, and Werner Lemberg */
|
||||
/* */
|
||||
/* This file is part of the FreeType project, and may only be used, */
|
||||
|
@ -58,15 +58,27 @@ FT_BEGIN_HEADER
|
|||
|
||||
|
||||
/*
|
||||
* C++ refuses to handle statements like p = (void*)anything; where `p'
|
||||
* is a typed pointer. Since we don't have a `typeof' operator in
|
||||
* standard C++, we have to use ugly casts.
|
||||
* C++ refuses to handle statements like p = (void*)anything, with `p' a
|
||||
* typed pointer. Since we don't have a `typeof' operator in standard
|
||||
* C++, we have to use a template to emulate it.
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
#define FT_ASSIGNP( p, val ) *((void**)&(p)) = (val)
|
||||
|
||||
extern "C++"
|
||||
template <typename T> inline T*
|
||||
cplusplus_typeof( T*,
|
||||
void *v )
|
||||
{
|
||||
return static_cast <T*> ( v );
|
||||
}
|
||||
|
||||
#define FT_ASSIGNP( p, val ) (p) = cplusplus_typeof( (p), (val) )
|
||||
|
||||
#else
|
||||
|
||||
#define FT_ASSIGNP( p, val ) (p) = (val)
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue