#include <cassert>
#include <iostream>
#define test_bool
#ifdef test_integer
#define type_t int
#elif defined(test_double)
#define type_t double
#elif defined(test_pointer)
#define type_t char *
#elif defined(test_bool)
#define type_t bool
#else
#error "must define test type!!!"
#endif // test_integer
struct test_t
{
char a;
type_t b;
bool c;
char d[10];
};
struct align_x86_t
{
char a;
char aa[3];
type_t b;
bool c;
char d[10];
char dd[1];
};
struct align_x64_t
{
char a;
char aa[7];
type_t b;
bool c;
char d[10];
char dd[4];
};
struct element_t
{
type_t b;
};
struct max_int_t
{
char a;
int b;
bool c;
};
struct max_double_t
{
char a;
double b;
bool c;
};
int main()
{
std::cout << sizeof(test_t) << std::endl;
std::cout << sizeof(align_x86_t) << std::endl;
std::cout << sizeof(align_x64_t) << std::endl;
#ifdef test_integer
assert(sizeof(test_t) == sizeof(align_x86_t));
#elif defined(test_double)
assert(sizeof(test_t) == sizeof(align_x64_t));
#endif // test_integer
std::cout << sizeof(element_t) << std::endl;
std::cout << sizeof(max_int_t) << std::endl;
std::cout << sizeof(max_double_t) << std::endl;
return(0);
}