std::chrono::system_clock::to_time_t() takes a time_point specialized on
the clock's own duration type. With libstdc++, system_clock::duration is
nanoseconds, so passing currentDateTime (explicitly declared as
time_point<system_clock, nanoseconds>) matches exactly and compiles. With
libc++, system_clock::duration is microseconds, and so the call fails to
compile.
This breaks the build of the InfiniSim simulator on macOS, where Apple
clang uses libc++. CI does not catch it because the simulator is only
built on Linux.
This change casts the time_point to the clock's duration before the call,
which is already what AlarmController.cpp and WatchFaceCasioStyleG7710.cpp
do at their equivalent call sites. This is an identity cast with libstdc++,
so the firmware build is unaffected; with libc++ it truncates nanoseconds
to microseconds, which is irrelevant because to_time_t truncates to whole
seconds anyway.
So, this change should have no effect other than enabling InfiniSim to
build successfully on macOS.
std::chrono::system_clock::to_time_t() takes a time_point specialized on
the clock's own duration type. With libstdc++, system_clock::duration is
nanoseconds, so passing currentDateTime (explicitly declared as
time_point<system_clock, nanoseconds>) matches exactly and compiles. With
libc++, system_clock::duration is microseconds, and so the call fails to
compile.
This breaks the build of the InfiniSim simulator on macOS, where Apple
clang uses libc++. CI does not catch it because the simulator is only
built on Linux.
This change casts the time_point to the clock's duration before the call,
which is already what AlarmController.cpp and WatchFaceCasioStyleG7710.cpp
do at their equivalent call sites. This is an identity cast with libstdc++,
so the firmware build is unaffected; with libc++ it truncates nanoseconds
to microseconds, which is irrelevant because to_time_t truncates to whole
seconds anyway.
So, this change should have no effect other than enabling InfiniSim to
build successfully on macOS.