Namespaces
Variants

std::chrono:: is_clock

From cppreference.net
Definiert in Header <chrono>
template < class T >
struct is_clock ;
(seit C++20)

Wenn T die Clock -Anforderungen erfüllt, liefert die Member-Konstante value den Wert true . Für jeden anderen Typ ist value gleich false .

Für den Zweck dieses Merkmals ist nicht spezifiziert, in welchem Umfang eine Implementierung feststellt, dass ein Typ die Clock -Anforderungen nicht erfüllen kann, außer dass ein Typ T sich nicht als Clock qualifiziert, es sei denn, er erfüllt alle folgenden Bedingungen:

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

Wenn das Programm Spezialisierungen für std::is_clock oder std::is_clock_v hinzufügt, ist das Verhalten undefiniert.

Inhaltsverzeichnis

Template-Parameter

T - ein zu prüfender Typ

Hilfsvariablen-Template

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

Geerbt von std:: integral_constant

Member-Konstanten

value
[static]
true wenn T die Clock Anforderungen erfüllt, false andernfalls
(öffentliche statische Member-Konstante)

Member-Funktionen

operator bool
konvertiert das Objekt zu bool , gibt value zurück
(öffentliche Member-Funktion)
operator()
(C++14)
gibt value zurück
(öffentliche Member-Funktion)

Member-Typen

Typ Definition
value_type bool
type std:: integral_constant < bool , value >

Mögliche Implementierung

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; // Typ wird nicht geprüft
            T::now();     // Rückgabetyp wird nicht geprüft
        }
struct is_clock<T> : std::true_type {};

Hinweise

Wenn T ansonsten die Clock -Anforderungen erfüllt, aber T::is_steady nicht vom Typ const bool ist, oder T::now() nicht vom Typ T :: time_point ist, dann ist das Ergebnis von is_clock_v<T> nicht spezifiziert.

Beispiel

#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() {}