- #include <iostream> 
- #include <cstdint> 
- #include <algorithm> 
- using namespace std; 
-   
- union structA{ 
-   uint8_t mem[3]; 
-   
-   struct{ 
-     unsigned field1 : 8; 
-     unsigned field2 : 12;  
-     unsigned field3 : 4; 
-   }; 
- }; 
-   
- struct structB{ 
-   uint8_t mem[10]; 
- }; 
-   
-   
- int main() { 
-   
- 	cout << "Infos:"<<endl;  
-     cout << "  Alignment constraint of structA: "<<alignof(structA)<<endl; 
-     cout << "  Alignment constraint of uint8_t: "<<alignof(uint8_t)<<endl; 
- 	cout << "  Size : "<<sizeof(structA)<<endl; 
- 	cout << "  Is trivially copyable: "<<is_trivially_copyable<structA>::value<<endl;  
-   
- 	structA ia;                                         // test object 
- 	ia.field1 =7; ia.field2=911; ia.field3=5;   
-   
- 	uint8_t globalMem[128];    
- 	fill( globalMem, globalMem +sizeof(globalMem), 0);      
-   
- 	structA *pa = new (globalMem+10) structA(ia);   // placement new to properly create object 
-   
- 	structA a1 = *reinterpret_cast<structA*>(&globalMem[0]); 
- 	structA a2 = *reinterpret_cast<structA*>(&globalMem[10]); 
- 	structB b1 = *reinterpret_cast<structB*>(&globalMem[30]); 
-   
- 	cout <<endl<<"Test:"<<endl; 
- 	cout << "  original: "<<ia.field1<<" "<<ia.field2<<" "<<ia.field3<<endl;  
- 	cout << "  copy:     " <<a2.field1<<" "<<a2.field2<<" "<<a2.field3<<endl;  
-   
- 	return 0; 
- } 
				I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGludD4KI2luY2x1ZGUgPGFsZ29yaXRobT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnVuaW9uIHN0cnVjdEF7CiAgdWludDhfdCBtZW1bM107CgogIHN0cnVjdHsKICAgIHVuc2lnbmVkIGZpZWxkMSA6IDg7CiAgICB1bnNpZ25lZCBmaWVsZDIgOiAxMjsgCiAgICB1bnNpZ25lZCBmaWVsZDMgOiA0OwogIH07Cn07CgpzdHJ1Y3Qgc3RydWN0QnsKICB1aW50OF90IG1lbVsxMF07Cn07CgoKaW50IG1haW4oKSB7CgkKCWNvdXQgPDwgIkluZm9zOiI8PGVuZGw7IAogICAgY291dCA8PCAiICBBbGlnbm1lbnQgY29uc3RyYWludCBvZiBzdHJ1Y3RBOiAiPDxhbGlnbm9mKHN0cnVjdEEpPDxlbmRsOwogICAgY291dCA8PCAiICBBbGlnbm1lbnQgY29uc3RyYWludCBvZiB1aW50OF90OiAiPDxhbGlnbm9mKHVpbnQ4X3QpPDxlbmRsOwoJY291dCA8PCAiICBTaXplIDogIjw8c2l6ZW9mKHN0cnVjdEEpPDxlbmRsOwoJY291dCA8PCAiICBJcyB0cml2aWFsbHkgY29weWFibGU6ICI8PGlzX3RyaXZpYWxseV9jb3B5YWJsZTxzdHJ1Y3RBPjo6dmFsdWU8PGVuZGw7IAoKCXN0cnVjdEEgaWE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0ZXN0IG9iamVjdAoJaWEuZmllbGQxID03OyBpYS5maWVsZDI9OTExOyBpYS5maWVsZDM9NTsgIAoJCgl1aW50OF90IGdsb2JhbE1lbVsxMjhdOyAgIAoJZmlsbCggZ2xvYmFsTWVtLCBnbG9iYWxNZW0gK3NpemVvZihnbG9iYWxNZW0pLCAwKTsgICAgIAoJCglzdHJ1Y3RBICpwYSA9IG5ldyAoZ2xvYmFsTWVtKzEwKSBzdHJ1Y3RBKGlhKTsgICAvLyBwbGFjZW1lbnQgbmV3IHRvIHByb3Blcmx5IGNyZWF0ZSBvYmplY3QKCQoJc3RydWN0QSBhMSA9ICpyZWludGVycHJldF9jYXN0PHN0cnVjdEEqPigmZ2xvYmFsTWVtWzBdKTsKCXN0cnVjdEEgYTIgPSAqcmVpbnRlcnByZXRfY2FzdDxzdHJ1Y3RBKj4oJmdsb2JhbE1lbVsxMF0pOwoJc3RydWN0QiBiMSA9ICpyZWludGVycHJldF9jYXN0PHN0cnVjdEIqPigmZ2xvYmFsTWVtWzMwXSk7CgkKCWNvdXQgPDxlbmRsPDwiVGVzdDoiPDxlbmRsOwoJY291dCA8PCAiICBvcmlnaW5hbDogIjw8aWEuZmllbGQxPDwiICI8PGlhLmZpZWxkMjw8IiAiPDxpYS5maWVsZDM8PGVuZGw7IAoJY291dCA8PCAiICBjb3B5OiAgICAgIiA8PGEyLmZpZWxkMTw8IiAiPDxhMi5maWVsZDI8PCIgIjw8YTIuZmllbGQzPDxlbmRsOyAKCQoJcmV0dXJuIDA7Cn0=