Howard Hinnant 在标准文件 P0092R1 中写道:
template <class To, class Rep, class Period,
class = enable_if_t<detail::is_duration<To>{}>>
constexpr
To floor(const duration<Rep, Period>& d)
{
To t = duration_cast<To>(d);
if (t > d)
--t;
return t;
}
这段代码如何工作?问题是operator--
on astd::chrono::duration
不是 constexpr 操作。它被定义为:
duration& operator--();
然而这段代码可以编译,并在编译时给出正确的答案:
static_assert(floor<hours>(minutes{3}).count() == 0, "”);
那是怎么回事?