#include <atomic>
#include <utility>
#include <new>
#include <iostream>
using namespace std;
struct MyStruct
{
char m_value = 10;
} __attribute__ ((aligned (16)));
template <class T>
struct Item
{
std::atomic< Item* > m_next;
char m_data[ sizeof( T ) ];
};
int main()
{
cout << "MyStruct: " << alignof(MyStruct) << endl;
cout << "Item: " << alignof(Item<MyStruct>) << endl;
Item<MyStruct> items[4];
for (int i = 0; i < 4; ++i)
{
MyStruct* value = new (items[i].m_data) MyStruct();
if (((size_t)value & 0x7) != 0)
cout << "Такого не бывает" << endl;
if (((size_t)value & 0xF) != 0)
cout << "Сосем хуйцы" << endl;
}
return 0;
}
I2luY2x1ZGUgPGF0b21pYz4KI2luY2x1ZGUgPHV0aWxpdHk+CiNpbmNsdWRlIDxuZXc+CiNpbmNsdWRlIDxpb3N0cmVhbT4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3QgTXlTdHJ1Y3QKewoJY2hhciBtX3ZhbHVlID0gMTA7Cn0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDE2KSkpOwoKdGVtcGxhdGUgPGNsYXNzIFQ+CnN0cnVjdCBJdGVtCnsKCXN0ZDo6YXRvbWljPCBJdGVtKiA+IG1fbmV4dDsKCWNoYXIgbV9kYXRhWyBzaXplb2YoIFQgKSBdOwp9OwoJCmludCBtYWluKCkKewoJY291dCA8PCAiTXlTdHJ1Y3Q6ICIgPDwgYWxpZ25vZihNeVN0cnVjdCkgPDwgZW5kbDsKCWNvdXQgPDwgIkl0ZW06ICAgICAiIDw8IGFsaWdub2YoSXRlbTxNeVN0cnVjdD4pIDw8IGVuZGw7CglJdGVtPE15U3RydWN0PiBpdGVtc1s0XTsKCWZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytpKQoJewoJCU15U3RydWN0KiB2YWx1ZSA9IG5ldyAoaXRlbXNbaV0ubV9kYXRhKSBNeVN0cnVjdCgpOwoJCWlmICgoKHNpemVfdCl2YWx1ZSAmIDB4NykgIT0gMCkKCQkJY291dCA8PCAi0KLQsNC60L7Qs9C+INC90LUg0LHRi9Cy0LDQtdGCIiA8PCBlbmRsOwoJCWlmICgoKHNpemVfdCl2YWx1ZSAmIDB4RikgIT0gMCkKCQkJY291dCA8PCAi0KHQvtGB0LXQvCDRhdGD0LnRhtGLIiA8PCBlbmRsOwoJfQoJcmV0dXJuIDA7Cn0K