std::chrono::is_clock
Определён в заголовочном файле <chrono> | ||
|---|---|---|
template< class T > struct is_clock; | (начиная с C++20) |
Если T удовлетворяет требованиям Clock, предоставляет константу-член value, равную true. Для любого другого типа value имеет значение false.
Для целей этого признака степень, в которой реализация определяет, что тип не может удовлетворять требованиям Clock, не определена, за исключением того, что минимальный T не должен считаться Clock, если он не удовлетворяет всем следующим условиям:
- Каждый из следующих квалифицированных идентификаторов корректен и обозначает тип:
T::repT::periodT::durationT::time_point- Каждое из следующих выражений корректно сформировано, если рассматривать его как невычисляемый операнд:
T::is_steadyT::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, иначе 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; // type is not checked
T::now(); // return type is not checked
}
struct is_clock<T> : std::true_type {};
|
Примечания
Если T в остальном удовлетворяет требованиям Clock, но T::is_steady не имеет тип constbool или 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() {}
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/chrono/is_clock