* After much consideration I consider this not a good change.
* It introduced a completely arbitrary mathematical relationship
among the units.
* This commit restores a precise relationship among the units which
is based on the Gregorian calendar.
* However this experiment has been preserved in the git history.
This library now compiles on Windows but requires VS2015 for Windows.
VS2013 may work but this has not been tested yet.
Requires NOMINMAX to be defined to avoid clashes with the Windows.h
headers and the C++ stl and this libraries Date max functions.
Also known to work equivalently with recent g++ and mingw combinations
but -std=C++14 flag should be set.
C++14 restrictions may be relaxed later. Patches welcome!
g++ 5.1 was tested. It may work with other version but that hasn't been tried.
Mac OS and Linux systems are known to compile with -std=c++11
current_timezone and locate_zone will return iana names not windows
time zone names. This is expected and as designed.
* The Gregorian average of months and years is an
integral number of seconds.
* This patch slightly tweaks the average to make it
not an integral number of seconds, and thus these
units no longer implicitly convert to seconds.
* This will flag naive mixing of years, months and seconds
as a compile time error.
to within the range of chrono::minutes.
* This prevents overflow when adding minutes to day_point
when minutes is stored in 32 bits.
* Also added static checks on the range of hours and seconds.
If these static checks fire, the range of year should be
further reduced.
* This does not impact gcc at all. It impacts clang only
when targeting 32 bit architectures. And it fixes
overflow on Visual Studio.
* Thanks much to https://github.com/gmcode for the herculean
effort in tracking this down.