【发布时间】:2019-02-20 06:51:59
【问题描述】:
我在处理 C++ 项目中的一些代码时遇到了问题。它包含std::chrono 库,并在以下断言处不断中断:
static_assert(system_clock::duration::min() < system_clock::duration::zero(), "a clock's minimum duration cannot be less than its epoch");
断言破坏了具有 g++ 6.3.0 的 Debian 机器和具有 Windows 10、CygWin 和 g++ 7.3.0 的 PC 中的代码。 我还在在线 C++ 编译器中尝试了一个简单的示例,包括 chrono 库,它本身不会产生任何问题,但是当手动比较 chrono 系统时钟的最小持续时间和零持续时间时,会给出应该触发断言的结果好吧。
我已经搜索了该问题,并发现了一些线索,这些线索导致了由包含时区信息的 TZ posix 变量引起的一些相关问题。尝试取消设置并将其设置为正确的值,但它对断言没有影响。
如果有任何指示或建议,我将不胜感激。
编辑: 虽然 std::chrono::milliseconds::zero() 的值(如预期的那样)为 0,但 std::chrono::milliseconds::min() 的值是 -9223372036854775808 或 -2^63,我认为这是 long long 值的最小可能值(可能溢出?)。
【问题讨论】:
-
这些函数的类型和取值是什么?以下是打印类型的方法:stackoverflow.com/a/20170989/576911