Just doing some quick testing I discovered the following
Code:
Windows x86
sizeof(void*) == 4
sizeof(size_t) == 4
sizeof(unsigned long) == 4
Windows x64
sizeof(void*) == 8
sizeof(size_t) == 8
sizeof(unsigned long) == 4
Linux x64
sizeof(void*) == 8
sizeof(size_t) == 8
sizeof(unsigned long) == 8
Notice on Linux x64 that sizeof(unsigned long) == sizeof(size_t) == sizeof(void*), and the same on Windows x86, but on Windows x64 unsigned long is still 32bit. As such, the Windows x64 build would probably break a lot of code which assumes that unsigned long == sizeof(void*).
Also, I've noticed some code that assumes an unsigned long is always 32bit (which, would ironically break Linux x64 runtime, but otherwise build fine, if you're very unlucky)
For example in the same Network.hpp file
Code:
/// Writes one LongWord (32 Bit) into the data buffer.
/// @param l LongWord to write.
void WriteLong(unsigned long l)
{
Data.PushBackEmpty(4);
*(unsigned long*)&Data[Data.Size()-4]=htonl(l);
}
Perhaps some uint32 uint64 etc types are called for to be unambiguous.
If you'd like I can give you access to a Windows x64 Virtual Machine with Visual Studio installed for development purposes (It is unfortunately on a crappy 1.5Mbit / 256k ADSL line though, but the box is a nice i7, so should have plenty of CPU and RAM available for compilation), I'm guessing that a lot of code would need to be touched in order to fix x64 properly and I'm still only just getting a feel for the Cafu code base, go figure.