It's used in GenerateRandomBit? (It's a global variable, almost certainly a bad idea for a general purpose random generator, though it'd probably be fine if it were _Thread_local)
True, but that's just used at if(GenerateRandomBit()) where it doesn't get stored, so I don't understand how dataPointer would have anything other than the zeros it has from the memset(&value, 0, sizeof(T)) call.
GenerateRandomBit() either returns true or false depending on the seed (which gets updated with each call). If it returns true on the first iteration then dataPointer[0] will be OR'd with 1 (i.e. set to "1"), otherwise it will be left as 0. For the next iteration, dataPointer[0] is conditionally OR'd with 2 etc. (until iteration 32, where it starts updating dataPointer[1]).
Ahh, okay now I'm understanding what's going on. Only dataPointer[0] is used unless it's a double, which will cause the pointerIndex to increase to 1 once the first 32 bits are set. Otherwise char[] will flip any/all of the first 8 bits, while int[] and float[] will be flipped for up to 32 bits at dataPointer[0]. Thanks for the explanation!