Strict aliasing is the only item on your list that I could see leading someone to get upset with the optimizer.  And, maaaaaaybe signed integer overflow. With strict aliasing, I don&#x27;t think your examples are correct. They all involve typecasting pointers, but don&#x27;t involve interacting with the original type later.  So, memcpy uses a void* as char* and MyAllocator uses char* as MyType*, but in both cases they never go back and expect predictible new values in the original types.<p>The rest are clearly taught in CS100 to be doorways to chaos.  In particular, complaining that volatile doesn&#x27;t get rid of the need for locks is just making noise.  Might as well complain that auto doesn&#x27;t get rid of the need for locks.  They are both unrelated to threading.