Skip to content

Latest commit

 

History

History
84 lines (66 loc) · 3.46 KB

File metadata and controls

84 lines (66 loc) · 3.46 KB

is_clock

  • chrono[meta header]
  • std::chrono[meta namespace]
  • class template[meta id-type]
  • cpp20[meta cpp]
namespace std::chrono {
  template <class T>
  struct is_clock;                                       // (1) C++20

  template <class T>
  inline constexpr bool is_clock_v = is_clock<T>::value; // (2) C++20
}

概要

is_clockは、クロック型かを判定する型特性である。

TがClock要件を満たす場合はtrue_typeから派生し、そうでなければfalse_typeから派生する。

Clock要件を満たすには、以下が必要である:

有効であるべき式 戻り値型 操作の意味論
C1::rep 算術型もしくはそのように振る舞うクラス C1::durationの値型
C1::period std::ratioの特殊化 クロックの時間周期 (秒ベース)
C1::duration chrono::duration<C1::rep, C1::period> クロックのduation
C1::time_point chrono::time_point<C1>もしくはchrono::time_point<C2, C1::duration> クロックのtime_point型。C1C2は同じエポックを参照する
C1::is_steady const bool t1 <= t2が常に真であり (注:時間が戻らない)、時間間隔が常に一定である場合にtrue、そうでなければfalse
C1::now() C1::time_point 現在の時間点を表すtime_pointオブジェクトを返す

ここで、以下のように定義する:

  • C1C2 : クロックの種類
  • t1t2 : C1::now()によって返される値。ここで、t1を返すnow()呼び出しはt2を返すnow()呼び出しよりも前に発生し、これらの呼び出しは両方ともC1::time_point::max()よりも前に発生するものとする (注: これは、C1t1t2の間でラップアラウンドしていないことを意味する)

is_clockは、以下を満たさない限り、Clock要件として適格ではない:

  • 修飾された型Tが、T::periodT::durationT::time_pointメンバ型を持っていること
  • T::is_steadyが評価されないオペランドで使用された場合に妥当であること
  • T::now()が評価されないオペランドで使用された場合に妥当であること

is_clockの特殊化を追加した場合のプログラムの動作は未定義である。

#include <chrono>

using namespace std::chrono;

int main()
{
  static_assert(is_clock_v<system_clock>);
  static_assert(is_clock_v<steady_clock>);
  static_assert(is_clock_v<high_resolution_clock>);
  static_assert(is_clock_v<utc_clock>);
  static_assert(is_clock_v<tai_clock>);
  static_assert(is_clock_v<gps_clock>);
  static_assert(is_clock_v<file_clock>);
}
  • is_clock_v[color ff0000]
  • system_clock[link system_clock.md]
  • steady_clock[link steady_clock.md]
  • high_resolution_clock[link high_resolution_clock.md]
  • utc_clock[link utc_clock.md]
  • tai_clock[link tai_clock.md]
  • gps_clock[link gps_clock.md]
  • file_clock[link file_clock.md]

出力

バージョン

言語

  • C++20

処理系