std::chrono:: is_clock
|
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:
- Cada uno de los siguientes identificadores calificados es válido y denota un tipo:
-
-
T::rep -
T::period -
T::duration -
T::time_point
-
- Cada una de las siguientes expresiones está bien formada cuando se trata como un operando no evaluado :
-
-
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() {}