Namespaces
Variants

std::chrono:: is_clock

From cppreference.net
ヘッダーで定義 <chrono>
template < class T >
struct is_clock ;
(C++20以降)

T Clock 要件を満たす場合、メンバ定数 value true に等しい値を提供します。それ以外の型の場合、 value false となります。

この特性の目的において、実装が型が Clock 要件を満たせないと判断する程度は未規定である。ただし、最小限の要件として、 T は以下の全ての条件を満たさない限り Clock として適格とはならない:

  • T::rep
  • T::period
  • T::duration
  • T::time_point
  • T::is_steady
  • T::now()

プログラムが std::is_clock または std::is_clock_v に対する特殊化を追加する場合、動作は未定義です。

目次

テンプレートパラメータ

T - チェックする型

ヘルパー変数テンプレート

template < class T >
constexpr bool is_clock_v = is_clock < T > :: value ;
(C++20以降)

std::integral_constantから継承

メンバ定数

value
[static]
true T Clock 要件を満たす場合は true 、それ以外の場合は false
(公開静的メンバ定数)

メンバ関数

operator bool
オブジェクトを bool に変換し、 value を返す
(公開メンバ関数)
operator()
(C++14)
value を返す
(公開メンバ関数)

メンバ型

定義
value_type bool
type std:: integral_constant < bool , value >

実装例

template<class>
struct is_clock : std::false_type {};
template<class T>
    requires
        requires
        {
            typename T::rep;
            typename T::period;
            typename T::duration;
            typename T::time_point;
            T::is_steady; // 型はチェックされない
            T::now();     // 戻り値の型はチェックされない
        }
struct is_clock<T> : std::true_type {};

注記

T がそれ以外の点で Clock 要件を満たすが、 T::is_steady の型が const bool ではない場合、または T::now() の戻り値型が T :: time_point ではない場合、 is_clock_v<T> の結果は未規定です。

#include <chrono>
#include <ratio>
static_assert
(
    std::chrono::is_clock_v<std::chrono::utc_clock> and
    not std::chrono::is_clock_v<std::chrono::duration<int, std::exa>>
);
int main() {}