#include <vector>
#include <iostream>
#include <assert.h>
#include <inttypes.h>
#include <stddef.h>
#include <memory.h>

struct MyStandardLayout {
	char mem_a;
	int16_t num_1;
	int32_t num_2;
	int64_t num_3;
	char mem_z;

	MyStandardLayout()
	: mem_a('a')
	, num_1(1)
	, num_2(2)
	, num_3(3)
	, mem_z('z')
	{ }

	void print() const {
		std::cout << 
			"MySL Obj: " <<
			mem_a << " / " <<
			num_1 << " / " <<
			num_2 << " / " <<
			num_3 << " / " <<
			mem_z << "\n";
	}
};

void ZeroInts(MyStandardLayout* pObj) {
	void* const pFirst = static_cast<void*>(&pObj->num_1);
	void* const pLast = static_cast<void*>(&pObj->num_3);

	const ptrdiff_t delta = static_cast<char*>(pLast) - static_cast<char*>(pFirst);
	assert(delta > 0);
	std::cout << "delta =  " << delta << "\n";
	const size_t sizeAll = delta + sizeof(int);
	std::cout << "sizeAll =  " << sizeAll << "\n";

	std::vector<char> buf( sizeAll, 0 );
	memcpy(pFirst, &buf[0], sizeAll);
}

int main()
{
	MyStandardLayout obj;
	obj.print();
	ZeroInts(&obj);
	obj.print();

    return 0;
}

