This release adds 64-bit intrinsic function support for the Microsoft x64 compiler, which makes 64-bit multiplication code much smaller and presumably faster. If something like intrinsics (e.g., _mul128) exist for gcc that we can use, please let me know, and I'll work on adding them.
It also corrects one more typo in the ill-fated 3.0.13 release that prevents it from compiling for one specific multiplication operation.
Remaining known work items:
1) Last time I checked, the version of gcc required by Apple didn't have sufficiently compliant template support, and won't compile. I need to merge in the changes that remove portions of the class so it will compile.
2) We should have a more comprehensive and thorough test harness for all other operations.
Files:
SafeInt3.hpp - the main int overflow class
SafeIntGcc.hpp - a header used to get SafeInt3.hpp compiling on gcc 4.3.2 and later
SafeIntTest.cpp - contains the compile-time sanity checks
TestMain.cpp - Calls main() for the run-time sanity checks
MultVerify.cpp - checks 64-bit multiplication operations for both throwing and non-throwing implementations
Version History:
3.0.13 - contains fixes where some template specializations were overly specialized, which caused problems for the gcc x64 compiler. Also contains a fix for a runtime bug where (int)-1 * (unsigned int64)0x80000000 failed when it should not have.
3.0.12 - Public branch from the original code that is used internally at Microsoft, numerous fixes needed because the gcc comiler is picky about different things than the Microsoft compiler.