34#define GET_TYPE_NAME(T) \
35 const char* get_type_name (T) { return # T; } \
36 const char* get_type_name (T*) { return # T "*"; } \
37 typedef void unused_type
49#ifndef _RWSTD_NO_LONG_LONG
54#elif defined (_MSC_VER)
64#ifndef _RWSTD_NO_LONG_DOUBLE
74#ifndef _RWSTD_NO_CLASS_PARTIAL_SPEC
82template <
class T,
int N>
84 enum { array_size =
N };
102#ifndef _RWSTD_NO_PART_SPEC_OVERLOAD
105int va_list_array_size_imp (
T *va)
111int va_list_array_size_imp (
T **va)
113 return sizeof (va_list) /
sizeof **va;
118 return va_list_array_size_imp (&va);
128 class no { yes yes_ [2]; };
130 template <
class U>
struct Type {};
132 template <
class U,
size_t N>
134 static no
test (...);
141int va_list_array_size_imp (
T **va)
143 return sizeof (va_list) /
sizeof **va;
148 return is_array<va_list>::value ? va_list_array_size_imp (&va) : 0;
154const char* va_list_type (
T *va)
162 memset (&va2, 0,
sizeof va2);
181 printf (
"#define _RWSTD_NO_VA_COPY\n");
184 memset (&va, 0,
sizeof va);
191 puts (
"typedef struct {");
193 int elem_size =
sizeof va;
195 elem_size /= array_size;
197 if (1 < elem_size /
sizeof (
void*))
198 printf (
" void* _C_data [%u];\n", elem_size /
sizeof (
void*));
199 else if (1 == elem_size /
sizeof (
void*))
200 puts (
" void* _C_data;");
201 else if (1 < elem_size %
sizeof (
void*))
202 printf (
" char _C_data [%u]\n", elem_size %
sizeof (
void*));
203 else if (1 == elem_size %
sizeof (
void*))
204 puts (
" char _C_data;");
206 puts (
"} __rw_va_elem;");
211 printf (
"typedef %s __rw_va_list [%d];\n"
212 "// #define _RWSTD_NO_VA_LIST_ARRAY // va_list is an array\n",
216 printf (
"typedef %s __rw_va_list;\n"
217 "#define _RWSTD_NO_VA_LIST_ARRAY // va_list is object type\n",
221 puts (
"#define _RWSTD_VA_LIST __rw_va_list");
IMPORT_C SInt32 printf(const Char *,...)
const char * get_type_name(...)
int va_list_array_size(va_list)
const char * va_list_type_name(va_list)
constexpr bool is_array
Metafunction for determining if a type is, or is a reference to, a toml::array.
static const char * type_name()
static const char * type_name()