8

標準文書 P0092R1 で、Howard Hinnant は次のように書いています。

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, "”);

どうしたの?

4

2 に答える 2