Namespaces
Variants

std::chrono:: is_clock

From cppreference.net
Definido en el encabezado <chrono>
template < class T >
struct is_clock ;
(desde C++20)

Si T satisface los requisitos de Clock , proporciona la constante miembro value igual a true . Para cualquier otro tipo, value es false .

Para el propósito de este rasgo, el grado en que una implementación determina que un tipo no puede cumplir con los Clock requisitos no está especificado, excepto que un tipo T no calificará como un Clock a menos que cumpla todas las siguientes condiciones:

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

Si el programa añade especializaciones para std::is_clock o std::is_clock_v , el comportamiento es indefinido.

Contenidos

Parámetros de plantilla

T - un tipo a verificar

Plantilla de variable auxiliar

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

Heredado de std:: integral_constant

Constantes miembro

value
[static]
true si T satisface los requisitos de Clock , false en caso contrario
(constante miembro pública estática)

Funciones miembro

operator bool
convierte el objeto a bool , devuelve value
(función miembro pública)
operator()
(C++14)
devuelve value
(función miembro pública)

Tipos miembro

Tipo Definición
value_type bool
type std:: integral_constant < bool , value >

Implementación posible

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; // el tipo no se verifica
            T::now();     // el tipo de retorno no se verifica
        }
struct is_clock<T> : std::true_type {};

Notas

Si T cumple por lo demás con los requisitos de Clock , pero T::is_steady no es del tipo const bool , o T::now() no es del tipo T :: time_point , el resultado de is_clock_v<T> no está especificado.

Ejemplo

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