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要件を満たすには、以下が必要である:
- 修飾された型
T
が、T::period
、T::duration
、T::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>);
}
xxxxxxxxxx
#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>);
}
出力
バージョン
言語
- C++20
処理系
- Clang: 9.0 ❌
- GCC: 9.2 ❌
- Visual C++: 2019 Update 3 ❌