C++ std::chrono::Standay_clock::now如何报告错误?

C++ std::chrono::Standay_clock::now如何报告错误?,c++,c++11,error-handling,chrono,C++,C++11,Error Handling,Chrono,这与我问的std::chrono::stable\u clock::now是否应该是noexcept有关。现在我知道了,我想知道这个函数是如何报告错误的?例如,此函数在Linux上的常见实现使用 它可能会返回错误。它不会。API中没有关于错误报告的规定。因此,Linux实现必须在内部处理错误或不返回(例如,通过exit()或std::terminate())。在std::chrono::stable\u clock::now()的调试实现中,Linuxclock\u gettime工具可能报告的

这与我问的
std::chrono::stable\u clock::now
是否应该是
noexcept
有关。现在我知道了,我想知道这个函数是如何报告错误的?例如,此函数在Linux上的常见实现使用
它可能会返回错误。

它不会。API中没有关于错误报告的规定。因此,Linux实现必须在内部处理错误或不返回(例如,通过
exit()
std::terminate()
)。

std::chrono::stable\u clock::now()
的调试实现中,Linux
clock\u gettime
工具可能报告的所有错误都是不可能的

错误是:

int clock_gettime(clockid_t clk_id, struct timespec *tp);


EFAULT
tp点位于可访问地址空间之外

没有用户提供的
tp
std::chrono::staid\u clock::now()中出错。如果
std::chrono::stable\u clock::now()
将错误的
tp
传递给
clock\u gettime
,那么它只是
stable\u clock
中的一个bug,很容易修复

EINVAL
此系统不支持指定的clk_id

没有用户提供的
clk\u id
std::chrono::stable\u clock::now()中出错。如果
std::chrono::stable\u clock::now()
将错误的
clk\u id
传递给
clock\u gettime
,则必须修复的只是
stable\u clock
中的一个错误

请注意,
稳定时钟
的实现不保证可移植,可能必须移植到任何给定的平台并进行正确性测试。在某些平台上,
stable\u clock
可能无法在
clock\u gettime
方面实现

EPERM
clock_settime()无权设置指示的时钟


不适用于
稳定时钟
,因为没有API来设置时间。

实现还可以存储最后一个成功值,并在无法访问实际时钟时返回该值。这满足了
稳定时钟
的单调要求。我不知道是否有任何实现真正做到了这一点。@gmannick属于“内部处理错误”的标题,但它(至少在原则上)不符合“时间点的值相对于实时以稳定的速率前进”的要求。从20.11.7.2/1[time.clock.stable].非常感谢你的回答。对于通常使用QueryPerformanceCounter实现时钟的Windows,它可以返回一个错误消息。文档似乎没有列举错误情况。对不起,我不熟悉Windows。我确实看到了LWG问题,目前处于状态和未来: