C++1z Chronoライブラリ durationクラスとtime_pointクラスの変更操作をconstexpr対応

ChronoライブラリはC++11, C++14と段階的にconstexprの対応を進めてきました。C++1zでは、durationの変更操作、time_pointの変更操作が全てconstexpr対応します。

template <class Rep, class Period = ratio<1>>
class duration {
public:
    constexpr duration& operator++();
    constexpr duration operator++(int);
    constexpr duration& operator--();
    constexpr duration operator--(int);

    constexpr duration& operator+=(const duration& d);
    constexpr duration& operator-=(const duration& d);

    constexpr duration& operator*=(const rep& rhs);
    constexpr duration& operator/=(const rep& rhs);
    constexpr duration& operator%=(const rep& rhs);
    constexpr duration& operator%=(const duration& rhs);
};
template <class Clock, class Duration = typename Clock::duration>
class time_point {
public:
    constexpr time_point& operator+=(const duration& d);
    constexpr time_point& operator-=(const duration& d);
};

これで、Chronoライブラリでconstexprになっていないのは、Clockだけになります。標準で定義されるClockは、実行環境の時計を扱うため、constexpr化はできません。自分で定義するClockがコンパイル時に扱えるものであれば、その時間演算は全てconstexprで行えるようになります。

参照

お断り

この記事の内容は、C++1zが正式リリースされる際には変更される可能性があります。正式リリース後には、C++日本語リファレンスサイトcpprefjpの以下の階層の下に解説ページを用意する予定です。