https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68519
--- Comment #7 from Jonathan Wakely <redi at gcc dot gnu.org> --- The problem is that duration<float> doesn't have sufficient precision to represent now+1s as a float (the value is the same as now) #include <chrono> constexpr std::chrono::seconds now(1513266095); constexpr auto then = now + std::chrono::duration<float>(1); static_assert( now < then, "" ); The timed waiting functions would have to check for such rounding errors.