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の以下の階層の下に解説ページを用意する予定です。