It seems to be in the case of a string op against a raw address, the compiler decides the destination object is 0 bytes long and throws a particular warning. Work around it by not using memcpy in one case and by disabling the warning in the other. Both are fairly benign code that basically operates in a hard coded way that knows the destination buffer is valid.