Piotr Caban (@piotr) commented about dlls/msvcp90/cxx.h:
+#define DEFINE_CXX_TYPE2(type, flags, ti_flags, dtor, copyctor, ...) \ static cxx_type_info type ## _cxx_type_info[1] = \
- { { 0, 0xdeadbeef, { 0, -1, 0 }, sizeof(type), 0xdeadbeef } }; \
- { { ti_flags, 0xdeadbeef, { 0, -1, 0 }, sizeof(type), 0xdeadbeef } }; \
\ -static const void * const type ## _cxx_type_classes[] = { type ## _cxx_type_info, __VA_ARGS__ }; \ +static const void * const type ## _cxx_type_classes[] = { __VA_ARGS__ }; \ static cxx_type_info_table type ## _cxx_type_table = { ARRAY_SIZE(type ## _cxx_type_classes) }; \ -static cxx_exception_type type ##_exception_type; \ +static cxx_exception_type type ##_exception_type = {flags}; \ \ static void init_ ## type ## _cxx(char *base) \ { \ type ## _cxx_type_info[0].type_info = (char *)&type ## _type_info - base; \
- type ## _cxx_type_info[0].copy_ctor = (char *)type ## _copy_ctor - base; \
- type ## _cxx_type_info[0].copy_ctor = ((ULONG_PTR)(copyctor) != (ULONG_PTR)NULL) ? (char *)(copyctor) - base : 0; \
Are the casts necessary? Is it enough to change it to `copyctor != NULL`?