Namespaces
Variants

std::chrono:: is_clock

From cppreference.net
Определено в заголовочном файле <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 в противном случае
(public static member constant)

Функции-члены

operator bool
преобразует объект в bool , возвращает value
(public member function)
operator()
(C++14)
возвращает value
(public member function)

Типы-члены

Тип Определение
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; // тип не проверяется
            T::now();     // возвращаемый тип не проверяется
        }
struct is_clock<T> : std::true_type {};

Примечания

Если T в остальном соответствует требованиям Clock , но T::is_steady не имеет тип const bool , или 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() {}