News for hackers. Stuff that matters.
Re:The Dangers of Super Smart Compilers by Kristine1975 on Sunday December 20, 2015 @09:38AM (#10767119)
IIRC unions are a common example.

If you mean type punning: That is fine in C (chapter 6.5.2.3 of the C11 Standard even mentions "type punning" in footnote 95), but not in C++, where it's undefined behavior.

I would just use memcpy. It works even when C code is compiled as C++, and modern compilers know what memcpy does and can optimize its call to a move operation: http://blog.regehr.org/archives/959

Re:The Dangers of Super Smart Compilers by barrkel on Sunday December 20, 2015 @11:33AM (#10767437)
Type punning is not fine in C99 - you need to use a correctly typed pointer or a char pointer.
Re:The Dangers of Super Smart Compilers by Kristine1975 on Sunday December 20, 2015 @12:52PM (#10767678)
You're right. Type punning via pointer cast, e.g.

  int i = ...
  float f = *(float*) &i;
is not fine (violates strict aliasing). Type punning via union, e.g.

  union { int i; float f; } u;
  u.i = ...
  float f = u.f;
is, though (but only in C).

Just use memcpy :-)