Spec-Zone.ru › C++

std::chrono::is_clock

Определён в заголовочном файле <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, иначе 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API