为什么在未来方向上找到从工作日 y 到工作日 x 的一天距离必须如此复杂?

Why does finding a day distance from weekday y to weekday x in future direction have to be this complicated?

libc++中,这是我们找到未来方向从工作日 y (rhs) 到工作日 x (lhs) 的天数的方式。

constexpr days operator-(const weekday& __lhs, const weekday& __rhs) noexcept
{
    const int __wdu = __lhs.c_encoding() - __rhs.c_encoding();
    const int __wk = (__wdu >= 0 ? __wdu : __wdu-6) / 7;
    return days{__wdu - __wk * 7};
}

date.h库中相同

CONSTCD14
inline
days
operator-(const weekday& x, const weekday& y) NOEXCEPT
{
    auto const wdu = x.wd_ - y.wd_;
    auto const wk = (wdu >= 0 ? wdu : wdu-6) / 7;
    return days{wdu - wk * 7};
}


我想知道为什么我们不能只做这个?

return days{x.wd_ - y.wd_ >= 0 ? x.wd_ - y.wd_ : x.wd_ - y.wd_ + 7};

理由是我想为 !ok()weekday 提供一些支持。例如:

auto x = weekday{13} - weekday{5};  // x == 1d

即,对于大于 [0, 6] 的某个范围,算法对 7 取模。这是一个实验,我想它仍在进行中。此支持未进入 C++20 spec.