Namespaces
Variants

Standard library header <chrono> (C++11)

From cppreference.net
Standard library headers

Этот заголовок является частью библиотеки даты и времени .

Содержание

Включения

(C++20)
Поддержка оператора трёхстороннего сравнения

Классы

Длительность
Определено в пространстве имён std::chrono
(C++11)
временной интервал
(шаблон класса)
указывает, что длительность конвертируема в длительность с другим периодом тиков
(шаблон класса)
создает нулевое, минимальное и максимальное значения счетчика тиков заданного типа
(шаблон класса)
Удобные определения типов длительности
Определено в пространстве имён std::chrono
std::chrono::nanoseconds (C++11) тип длительности с периодом std::nano
std::chrono::microseconds (C++11) тип длительности с периодом std::micro
std::chrono::milliseconds (C++11) тип длительности с периодом std::milli
std::chrono::seconds (C++11) тип длительности с периодом std:: ratio < 1 >
std::chrono::minutes (C++11) тип длительности с периодом std:: ratio < 60 >
std::chrono::hours (C++11) тип длительности с периодом std:: ratio < 3600 >
std::chrono::days (C++20) тип длительности с периодом std:: ratio < 86400 >
std::chrono::weeks (C++20) тип длительности с периодом std:: ratio < 604800 >
std::chrono::months (C++20) тип длительности с периодом std:: ratio < 2629746 >
std::chrono::years (C++20) тип длительности с периодом std:: ratio < 31556952 >
Точка времени
Определено в пространстве имён std::chrono
(C++11)
точка во времени
(шаблон класса)
traits-класс, определяющий преобразование временных точек одного часового механизма в другой
(шаблон класса)
Часы
Определено в пространстве имён std::chrono
определяет, является ли тип Clock
(шаблон класса) (шаблон переменной)
время настенных часов из системных часов реального времени
(класс)
монотонные часы, которые никогда не будут корректироваться
(класс)
часы с наименьшим доступным периодом тика
(класс)
(C++20)
Clock для Всемирного координированного времени (UTC)
(класс)
(C++20)
Clock для Международного атомного времени (TAI)
(класс)
(C++20)
Clock для GPS времени
(класс)
(C++20)
Clock используется для файлового времени
(typedef)
(C++20)
псевдо-часы, представляющие локальное время
(класс)
Календарь
Определено в пространстве имён std::chrono
(C++20)
класс-метка, обозначающий последний день или день недели в месяце
(класс)
(C++20)
представляет день месяца
(класс)
(C++20)
представляет месяц года
(класс)
(C++20)
представляет год в григорианском календаре
(класс)
(C++20)
представляет день недели в григорианском календаре
(класс)
представляет n-ый й weekday дня недели месяца
(класс)
представляет последний weekday месяца
(класс)
(C++20)
представляет конкретный day конкретного month
(класс)
представляет последний день конкретного month
(класс)
представляет n-ый й weekday определённого month
(класс)
представляет последний weekday определённого month
(класс)
(C++20)
представляет определённый month определённого year
(класс)
представляет определённые year , month , и day
(класс)
представляет последний день конкретного year и month
(класс)
представляет n-ый й weekday определённого year и month
(класс)
представляет последний weekday определённого year и month
(класс)
Время суток
Определено в пространстве имён std::chrono
(C++20)
представляет время суток
(шаблон класса)
Часовой пояс
Определено в пространстве имён std::chrono
(C++20)
описывает копию базы данных часовых поясов IANA
(класс)
(C++20)
представляет собой связный список tzdb
(класс)
(C++20)
представляет временную зону
(класс)
(C++20)
представляет информацию о часовом поясе в определённой точке времени
(класс)
(C++20)
представляет информацию о преобразовании локального времени в UNIX-время
(класс)
(C++20)
выбирает, как должно разрешаться неоднозначное локальное время
(enum)
traits-класс для указателей часовых поясов, используемых zoned_time
(шаблон класса)
(C++20)
представляет часовой пояс и момент времени
(класс)
представляет альтернативное название для часового пояса
(класс)
исключение, выбрасываемое для сообщения о том, что локальное время не существует
(класс)
исключение, выбрасываемое для сообщения о неоднозначности локального времени
(класс)
Секунда координации
Определено в пространстве имён std::chrono
содержит информацию о вставке високосной секунды
(класс)
информация о вставке секунды координации
(класс)
Специализации
Определено в пространстве имён std
специализирует std::common_type трейт
(специализация шаблона класса)
специализирует std::common_type трейт
(специализация шаблона класса)
поддержка форматирования для duration
(специализация шаблона класса)
поддержка форматирования для sys_time
(специализация шаблона класса)
поддержка форматирования для utc_time
(специализация шаблона класса)
поддержка форматирования для tai_time
(специализация шаблона класса)
поддержка форматирования для gps_time
(специализация шаблона класса)
поддержка форматирования для file_time
(специализация шаблона класса)
поддержка форматирования для local_time
(специализация шаблона класса)
поддержка форматирования для day
(специализация шаблона класса)
поддержка форматирования для month
(специализация шаблона класса)
поддержка форматирования для year
(специализация шаблона класса)
поддержка форматирования для weekday
(специализация шаблона класса)
поддержка форматирования для weekday_indexed
(специализация шаблона класса)
поддержка форматирования для weekday_last
(специализация шаблона класса)
поддержка форматирования для month_day
(специализация шаблона класса)
поддержка форматирования для month_day_last
(специализация шаблона класса)
поддержка форматирования для month_weekday
(специализация шаблона класса)
поддержка форматирования для month_weekday_last
(специализация шаблона класса)
поддержка форматирования для year_month
(специализация шаблона класса)
поддержка форматирования для year_month_day
(специализация шаблона класса)
поддержка форматирования для year_month_day_last
(специализация шаблона класса)
поддержка форматирования для year_month_weekday
(специализация шаблона класса)
поддержка форматирования для year_month_weekday_last
(специализация шаблона класса)
поддержка форматирования для hh_mm_ss
(специализация шаблона класса)
поддержка форматирования для sys_info
(специализация шаблона класса)
поддержка форматирования для local_info
(специализация шаблона класса)
поддержка форматирования для zoned_time
(специализация шаблона класса)
поддержка хеширования для std::chrono::duration
(специализация шаблона класса)
поддержка хеширования для std::chrono::time_point
(специализация шаблона класса)
поддержка хеширования для std::chrono::day
(специализация шаблона класса)
поддержка хеширования для std::chrono::month
(специализация шаблона класса)
поддержка хеширования для std::chrono::year
(специализация шаблона класса)
поддержка хеширования для std::chrono::weekday
(специализация шаблона класса)
поддержка хеширования для std::chrono::weekday_indexed
(специализация шаблона класса)
поддержка хеширования для std::chrono::weekday_last
(специализация шаблона класса)
поддержка хеширования для std::chrono::month_day
(специализация шаблона класса)
поддержка хеширования для std::chrono::month_day_last
(специализация шаблона класса)
поддержка хеширования для std::chrono::month_weekday
(специализация шаблона класса)
поддержка хеширования для std::chrono::month_weekday_last
(специализация шаблона класса)
поддержка хеширования для std::chrono::year_month
(специализация шаблона класса)
поддержка хеширования для std::chrono::year_month_day
(специализация шаблона класса)
поддержка хеширования для std::chrono::year_month_day_last
(специализация шаблона класса)
поддержка хеширования для std::chrono::year_month_weekday
(специализация шаблона класса)
поддержка хеширования для std::chrono::year_month_weekday_last
(специализация шаблона класса)
поддержка хеширования для std::chrono::zoned_time
(специализация шаблона класса)
поддержка хеширования для std::chrono::leap_second
(специализация шаблона класса)
Форвардные декларации
Определено в заголовочном файле <functional>
(C++11)
функциональный объект хеш-функции
(шаблон класса)

Функции

Длительность
Определено в пространстве имён std::chrono
реализует арифметические операции с duration в качестве аргументов
(шаблон функции)
(C++11) (C++11) (удалено в C++20) (C++11) (C++11) (C++11) (C++11) (C++20)
сравнивает две длительности
(шаблон функции)
преобразует длительность в другую с другим интервалом тиков
(шаблон функции)
преобразует длительность в другую, округляя в меньшую сторону
(шаблон функции)
преобразует длительность в другую, с округлением вверх
(шаблон функции)
преобразует длительность в другую, округляя до ближайшего, при равенстве - к чётному
(шаблон функции)
получает абсолютное значение длительности
(шаблон функции)
Точка времени
Определено в пространстве имён std::chrono
выполняет операции сложения и вычитания с участием точки времени
(шаблон функции)
(C++11) (C++11) (removed in C++20) (C++11) (C++11) (C++11) (C++11) (C++20)
сравнивает две точки времени
(шаблон функции)
преобразует временную точку в другую временную точку на тех же часах, с другой длительностью
(шаблон функции)
преобразует time_point в другой, округляя вниз
(шаблон функции)
преобразует time_point в другой, округляя вверх
(шаблон функции)
преобразует time_point в другой, округляя до ближайшего, при равенстве - к чётному
(шаблон функции)
парсит sys_time из потока в соответствии с предоставленным форматом
(шаблон функции)
парсирует utc_time из потока в соответствии с предоставленным форматом
(шаблон функции)
парсирует tai_time из потока в соответствии с предоставленным форматом
(шаблон функции)
парсирует gps_time из потока в соответствии с предоставленным форматом
(шаблон функции)
парсирует file_time из потока в соответствии с предоставленным форматом
(шаблон функции)
парсирует local_time из потока в соответствии с предоставленным форматом
(шаблон функции)
(C++20)
преобразует временные точки одного часового механизма в другой
(шаблон функции)
Календарь
Определено в пространстве имён std::chrono
сравнивает два значения day
(функция)
сравнивает два значения month
(функция)
сравнивает два значения year
(функция)
(C++20)
сравнивает два weekday значения
(функция)
(C++20)
сравнивает два значения weekday_indexed
(функция)
(C++20)
сравнивает два значения weekday_last
(функция)
сравнивает два значения month_day
(функция)
сравнивает два значения month_day_last
(функция)
(C++20)
сравнивает два значения month_weekday
(функция)
(C++20)
сравнивает два значения month_weekday_last
(функция)
сравнивает два значения year_month
(функция)
сравнивает два значения year_month_day
(функция)
сравнивает два значения year_month_day_last
(функция)
(C++20)
сравнивает два значения year_month_weekday
(функция)
(C++20)
сравнивает два значения year_month_weekday_last
(функция)
добавляет или вычитает количество дней и day , или находит разницу между двумя day s
(функция)
выполняет арифметические операции с month s
(функция)
выполняет арифметические операции с year s
(функция)
выполняет арифметические операции с weekday
(функция)
выполняет арифметические операции с year_month
(функция)
добавляет или вычитает year_month_day и некоторое количество лет или месяцев
(функция)
добавляет или вычитает year_month_day_last и некоторое количество лет или месяцев
(функция)
добавляет или вычитает year_month_weekday и некоторое количество лет или месяцев
(функция)
добавляет или вычитает year_month_weekday_last и некоторое количество лет или месяцев
(функция)
(C++20)
традиционный синтаксис для создания дат по григорианскому календарю
(функция)
Время суток
Определено в пространстве имён std::chrono
преобразует между 12-часовым/24-часовым форматом времени суток
(функция)
Часовой пояс
Определено в пространстве имён std::chrono
предоставляет доступ и управление глобальной информацией базы данных часовых поясов
(функция)
находит time_zone по его имени
(функция)
сравнивает два объекта time_zone
(функция)
(C++20)
сравнивает два значения zoned_time
(шаблон функции)
сравнивает два объекта time_zone_link
(функция)
Секунда координации
Определено в пространстве имён std::chrono
получает информацию о вставке високосной секунды из объекта utc_time
(шаблон функции)
сравнивает два значения leap_second или значение leap_second и значение sys_time
(шаблон функции)
Ввод/Вывод
Определено в пространстве имён std::chrono
(C++20)
выполняет потоковый вывод для duration
(шаблон функции)
выполняет потоковый вывод для sys_time
(шаблон функции)
выполняет потоковый вывод для utc_time
(шаблон функции)
выполняет потоковый вывод для tai_time
(шаблон функции)
выполняет потоковый вывод для gps_time
(шаблон функции)
выполняет потоковый вывод для file_time
(шаблон функции)
(C++20)
выводит day в поток
(шаблон функции)
(C++20)
выводит month в поток
(шаблон функции)
(C++20)
выводит year в поток
(шаблон функции)
(C++20)
выводит weekday в поток
(шаблон функции)
(C++20)
выводит weekday_indexed в поток
(шаблон функции)
(C++20)
выводит weekday_last в поток
(шаблон функции)
(C++20)
выводит month_day в поток
(шаблон функции)
(C++20)
выводит month_day_last в поток
(шаблон функции)
(C++20)
выводит month_weekday в поток
(шаблон функции)
(C++20)
выводит month_weekday_last в поток
(шаблон функции)
(C++20)
выводит year_month в поток
(шаблон функции)
(C++20)
выводит year_month_day в поток
(шаблон функции)
(C++20)
выводит year_month_day_last в поток
(шаблон функции)
(C++20)
выводит year_month_weekday в поток
(шаблон функции)
(C++20)
выводит year_month_weekday_last в поток
(шаблон функции)
(C++20)
выводит hh_mm_ss в поток
(шаблон функции)
(C++20)
выводит sys_info в поток
(шаблон функции)
(C++20)
выводит local_info в поток
(шаблон функции)
(C++20)
выводит zoned_time в поток
(шаблон функции)
парсит day из потока в соответствии с предоставленным форматом
(шаблон функции)
парсит month из потока согласно предоставленному формату
(шаблон функции)
парсирует year из потока в соответствии с предоставленным форматом
(шаблон функции)
парсит weekday из потока в соответствии с предоставленным форматом
(шаблон функции)
парсит month_day из потока в соответствии с предоставленным форматом
(шаблон функции)
парсит year_month из потока в соответствии с предоставленным форматом
(шаблон функции)
парсит year_month_day из потока согласно предоставленному формату
(шаблон функции)
(C++20)
парсит chrono объект из потока
(шаблон функции)
Литералы
Определено во встроенном пространстве имён std::literals::chrono_literals
литерал для std::chrono::duration представляющий часы
(функция)
литерал std::chrono::duration представляющий минуты
(функция)
литерал std::chrono::duration представляющий секунды
(функция)
литерал std::chrono::duration представляющий миллисекунды
(функция)
литерал std::chrono::duration представляющий микросекунды
(функция)
литерал std::chrono::duration представляющий наносекунды
(функция)
литерал std::chrono::day представляющий день месяца
(функция)
литерал std::chrono::year представляющий конкретный год
(функция)

Синопсис

#include <compare>
namespace std {
  namespace chrono {
    // шаблон класса duration
    template<class Rep, class Period = ratio<1>> class duration;
    // шаблон класса time_point
    template<class Clock, class Duration = typename Clock::длительность> class time_point;
  }
  // специализации common_type
  template<class Rep1, class Period1, class Rep2, class Period2>
    struct common_type<chrono::длительность<Rep1, Period1>,
                       chrono::длительность<Rep2, Period2>>;
  template<class Clock, class Duration1, class Duration2>
    struct common_type<chrono::time_point<Clock, Duration1>,
                       chrono::time_point<Clock, Duration2>>;
  namespace chrono {
    // трейты кастомизации
    template<class Rep> struct treat_as_floating_point;
    template<class Rep>
      inline constexpr bool treat_as_floating_point_v = treat_as_floating_point<Rep>::значение;
    template<class Rep> struct duration_values;
    template<class T> struct is_clock;
    template<class T> inline constexpr bool is_clock_v = is_clock<T>::значение;
    // арифметика длительностей
    template<class Rep1, class Period1, class Rep2, class Period2>
      constexpr common_type_t<duration<Rep1, Period1>, duration<Rep2, Period2>>
        operator+(const duration<Rep1, Period1>& lhs, const duration<Rep2, Period2>& rhs);
    template<class Rep1, class Period1, class Rep2, class Period2>
      constexpr common_type_t<duration<Rep1, Period1>, duration<Rep2, Period2>>
        operator-(const duration<Rep1, Period1>& lhs, const duration<Rep2, Period2>& rhs);
    template<class Rep1, class Period, class Rep2>
      constexpr duration<common_type_t<Rep1, Rep2>, Period>
        operator*(const duration<Rep1, Period>& d, const Rep2& s);
    template<class Rep1, class Rep2, class Period>
      constexpr duration<common_type_t<Rep1, Rep2>, Period>
        operator*(const Rep1& s, const duration<Rep2, Period>& d);
    template<class Rep1, class Period, class Rep2>
      constexpr duration<common_type_t<Rep1, Rep2>, Period>
        operator/(const duration<Rep1, Period>& d, const Rep2& s);
    template<class Rep1, class Period1, class Rep2, class Period2>
      constexpr common_type_t<Rep1, Rep2>
        operator/(const duration<Rep1, Period1>& lhs, const duration<Rep2, Period2>& rhs);
    template<class Rep1, class Period, class Rep2>
      constexpr duration<common_type_t<Rep1, Rep2>, Period>
        operator%(const duration<Rep1, Period>& d, const Rep2& s);
    template<class Rep1, class Period1, class Rep2, class Period2>
      constexpr common_type_t<duration<Rep1, Period1>, duration<Rep2, Period2>>
        operator%(const duration<Rep1, Period1>& lhs, const duration<Rep2, Period2>& rhs);
    // сравнения длительностей
    template<class Rep1, class Period1, class Rep2, class Period2>
      constexpr bool operator==(const duration<Rep1, Period1>& lhs,
                                const duration<Rep2, Period2>& rhs);
    template<class Rep1, class Period1, class Rep2, class Period2>
      constexpr bool operator< (const duration<Rep1, Period1>& lhs,
                                const duration<Rep2, Period2>& rhs);
    template<class Rep1, class Period1, class Rep2, class Period2>
      constexpr bool operator> (const duration<Rep1, Period1>& lhs,
                                const duration<Rep2, Period2>& rhs);
    template<class Rep1, class Period1, class Rep2, class Period2>
      constexpr bool operator<=(const duration<Rep1, Period1>& lhs,
                                const duration<Rep2, Period2>& rhs);
    template<class Rep1, class Period1, class Rep2, class Period2>
      constexpr bool operator>=(const duration<Rep1, Period1>& lhs,
                                const duration<Rep2, Period2>& rhs);
    template<class Rep1, class Period1, class Rep2, class Period2>
      requires /* см. описание */
      constexpr auto operator<=>(const duration<Rep1, Period1>& lhs,
                                 const duration<Rep2, Period2>& rhs);
    // преобразования
    template<class ToDuration, class Rep, class Period>
      constexpr ToDuration duration_cast(const duration<Rep, Period>& d);
    template<class ToDuration, class Rep, class Period>
      constexpr ToDuration floor(const duration<Rep, Period>& d);
    template<class ToDuration, class Rep, class Period>
      constexpr ToDuration ceil(const duration<Rep, Period>& d);
    template<class ToDuration, class Rep, class Period>
      constexpr ToDuration round(const duration<Rep, Period>& d);
    // ввод-вывод длительности
    template<class CharT, class Traits, class Rep, class Period>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os,
                   const duration<Rep, Period>& d);
    template<class CharT, class Traits, class Rep, class Period, class Alloc = allocator<CharT>>
      basic_istream<CharT, Traits>&
        from_stream(basic_istream<CharT, Traits>& is, const CharT* fmt,
                    duration<Rep, Period>& d,
                    basic_string<CharT, Traits, Alloc>* abbrev = nullptr,
                    minutes* offset = nullptr);
    // удобные typedef-объявления
    using nanoseconds  = duration</* знаковый целочисленный тип размером не менее 64 бит */, nano>;
    using microseconds = duration</* знаковый целочисленный тип размером не менее 55 бит */, micro>;
    using milliseconds = duration</* знаковый целочисленный тип размером не менее 45 бит */, milli>;
    using seconds      = duration</* знаковый целочисленный тип размером не менее 35 бит */>;
    using minutes      = duration</* знаковый целочисленный тип размером не менее 29 бит */,
                                  ratio<  60>>;
    using hours        = duration</* знаковый целочисленный тип размером не менее 23 бит */,
                                  ratio<3600>>;
    using days         = duration</* знаковый целочисленный тип размером не менее 25 бит */,
                                  ratio_multiply<ratio<24>, hours::период>>;
    using weeks        = duration</* знаковый целочисленный тип размером не менее 22 бит */,
                                  ratio_multiply<ratio<7>, days::период>>;
    using years        = duration</* знаковый целочисленный тип размером не менее 17 бит */,
                                  ratio_multiply<ratio<146097, 400>, days::период>>;
    using months       = duration</* знаковый целочисленный тип размером не менее 20 бит */,
                                  ratio_divide<years::период, ratio<12>>>;
    // time_point arithmetic
    template<class Clock, class Duration1, class Rep2, class Period2>
      constexpr time_point<Clock, common_type_t<Duration1, duration<Rep2, Period2>>>
        operator+(const time_point<Clock, Duration1>& lhs, const duration<Rep2, Period2>& rhs);
    template<class Rep1, class Period1, class Clock, class Duration2>
      constexpr time_point<Clock, common_type_t<duration<Rep1, Period1>, Duration2>>
        operator+(const duration<Rep1, Period1>& lhs, const time_point<Clock, Duration2>& rhs);
    template<class Clock, class Duration1, class Rep2, class Period2>
      constexpr time_point<Clock, common_type_t<Duration1, duration<Rep2, Period2>>>
        operator-(const time_point<Clock, Duration1>& lhs, const duration<Rep2, Period2>& rhs);
    template<class Clock, class Duration1, class Duration2>
      constexpr common_type_t<Duration1, Duration2>
        operator-(const time_point<Clock, Duration1>& lhs,
                  const time_point<Clock, Duration2>& rhs);
    // сравнения time_point
    template<class Clock, class Duration1, class Duration2>
       constexpr bool operator==(const time_point<Clock, Duration1>& lhs,
                                 const time_point<Clock, Duration2>& rhs);
    template<class Clock, class Duration1, class Duration2>
       constexpr bool operator< (const time_point<Clock, Duration1>& lhs,
                                 const time_point<Clock, Duration2>& rhs);
    template<class Clock, class Duration1, class Duration2>
       constexpr bool operator> (const time_point<Clock, Duration1>& lhs,
                                 const time_point<Clock, Duration2>& rhs);
    template<class Clock, class Duration1, class Duration2>
       constexpr bool operator<=(const time_point<Clock, Duration1>& lhs,
                                 const time_point<Clock, Duration2>& rhs);
    template<class Clock, class Duration1, class Duration2>
       constexpr bool operator>=(const time_point<Clock, Duration1>& lhs,
                                 const time_point<Clock, Duration2>& rhs);
    template<class Clock, class Duration1, three_way_comparable_with<Duration1> Duration2>
       constexpr auto operator<=>(const time_point<Clock, Duration1>& lhs,
                                  const time_point<Clock, Duration2>& rhs);
    // преобразования
    template<class ToDuration, class Clock, class Duration>
      constexpr time_point<Clock, ToDuration>
        time_point_cast(const time_point<Clock, Duration>& t);
    template<class ToDuration, class Clock, class Duration>
      constexpr time_point<Clock, ToDuration> floor(const time_point<Clock, Duration>& tp);
    template<class ToDuration, class Clock, class Duration>
      constexpr time_point<Clock, ToDuration> ceil(const time_point<Clock, Duration>& tp);
    template<class ToDuration, class Clock, class Duration>
      constexpr time_point<Clock, ToDuration> round(const time_point<Clock, Duration>& tp);
    // специализированные алгоритмы
    template<class Rep, class Period>
      constexpr duration<Rep, Period> abs(duration<Rep, Period> d);
    // class system_clock
    class system_clock;
    template<class Duration>
      using sys_time  = time_point<system_clock, Duration>;
    using sys_seconds = sys_time<seconds>;
    using sys_days    = sys_time<days>;
    template<class CharT, class Traits, class Duration>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const sys_time<Duration>& tp);
    template<class CharT, class Traits>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const sys_days& dp);
    template<class CharT, class Traits, class Duration, class Alloc = allocator<CharT>>
      basic_istream<CharT, Traits>&
        from_stream(basic_istream<CharT, Traits>& is, const CharT* fmt,
                    sys_time<Duration>& tp,
                    basic_string<CharT, Traits, Alloc>* abbrev = nullptr,
                    minutes* offset = nullptr);
    // class utc_clock
    class utc_clock;
    template<class Duration>
      using utc_time  = time_point<utc_clock, Duration>;
    using utc_seconds = utc_time<seconds>;
    template<class CharT, class Traits, class Duration>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const utc_time<Duration>& t);
    template<class CharT, class Traits, class Duration, class Alloc = allocator<CharT>>
      basic_istream<CharT, Traits>&
        from_stream(basic_istream<CharT, Traits>& is, const CharT* fmt,
                    utc_time<Duration>& tp,
                    basic_string<CharT, Traits, Alloc>* abbrev = nullptr,
                    minutes* offset = nullptr);
    struct leap_second_info;
    template<class Duration>
      leap_second_info get_leap_second_info(const utc_time<Duration>& ut);
    // класс tai_clock
    class tai_clock;
    template<class Duration>
      using tai_time  = time_point<tai_clock, Duration>;
    using tai_seconds = tai_time<seconds>;
    template<class CharT, class Traits, class Duration>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const tai_time<Duration>& t);
    template<class CharT, class Traits, class Duration, class Alloc = allocator<CharT>>
      basic_istream<CharT, Traits>&
        from_stream(basic_istream<CharT, Traits>& is, const CharT* fmt,
                    tai_time<Duration>& tp,
                    basic_string<CharT, Traits, Alloc>* abbrev = nullptr,
                    minutes* offset = nullptr);
    // класс gps_clock
    class gps_clock;
    template<class Duration>
      using gps_time  = time_point<gps_clock, Duration>;
    using gps_seconds = gps_time<seconds>;
    template<class CharT, class Traits, class Duration>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const gps_time<Duration>& t);
    template<class CharT, class Traits, class Duration, class Alloc = allocator<CharT>>
      basic_istream<CharT, Traits>&
        from_stream(basic_istream<CharT, Traits>& is, const CharT* fmt,
                    gps_time<Duration>& tp,
                    basic_string<CharT, Traits, Alloc>* abbrev = nullptr,
                    minutes* offset = nullptr);
    // type file_clock
    using file_clock = /* см. описание */;
    template<class Duration>
      using file_time = time_point<file_clock, Duration>;
    template<class CharT, class Traits, class Duration>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const file_time<Duration>& tp);
    template<class CharT, class Traits, class Duration, class Alloc = allocator<CharT>>
      basic_istream<CharT, Traits>&
        from_stream(basic_istream<CharT, Traits>& is, const CharT* fmt,
                    file_time<Duration>& tp,
                    basic_string<CharT, Traits, Alloc>* abbrev = nullptr,
                    minutes* offset = nullptr);
    // класс steady_clock
    class steady_clock;
    // class high_resolution_clock
    class high_resolution_clock;
    // локальное время
    struct local_t {};
    template<class Duration>
      using local_time  = time_point<local_t, Duration>;
    using local_seconds = local_time<seconds>;
    using local_days    = local_time<days>;
    template<class CharT, class Traits, class Duration>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const local_time<Duration>& tp);
    template<class CharT, class Traits, class Duration, class Alloc = allocator<CharT>>
      basic_istream<CharT, Traits>&
        from_stream(basic_istream<CharT, Traits>& is, const CharT* fmt,
                    local_time<Duration>& tp,
                    basic_string<CharT, Traits, Alloc>* abbrev = nullptr,
                    minutes* offset = nullptr);
    // преобразования time_point
    template<class DestClock, class SourceClock>
      struct clock_time_conversion;
    template<class DestClock, class SourceClock, class Duration>
      auto clock_cast(const time_point<SourceClock, Duration>& t);
    // class last_spec
    struct last_spec;
    // класс day
    class day;
    constexpr bool operator==(const day& x, const day& y) noexcept;
    constexpr strong_ordering operator<=>(const day& x, const day& y) noexcept;
    constexpr day  operator+(const day&  x, const days& y) noexcept;
    constexpr day  operator+(const days& x, const day&  y) noexcept;
    constexpr day  operator-(const day&  x, const days& y) noexcept;
    constexpr days operator-(const day&  x, const day&  y) noexcept;
    template<class CharT, class Traits>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const day& d);
    template<class CharT, class Traits, class Alloc = allocator<CharT>>
      basic_istream<CharT, Traits>&
        from_stream(basic_istream<CharT, Traits>& is, const CharT* fmt,
                    day& d, basic_string<CharT, Traits, Alloc>* abbrev = nullptr,
                    minutes* offset = nullptr);
    // класс month
    class month;
    constexpr bool operator==(const month& x, const month& y) noexcept;
    constexpr strong_ordering operator<=>(const month& x, const month& y) noexcept;
    constexpr month  operator+(const month&  x, const months& y) noexcept;
    constexpr month  operator+(const months& x,  const month& y) noexcept;
    constexpr month  operator-(const month&  x, const months& y) noexcept;
    constexpr months operator-(const month&  x,  const month& y) noexcept;
    template<class CharT, class Traits>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const month& m);
    template<class CharT, class Traits, class Alloc = allocator<CharT>>
      basic_istream<CharT, Traits>&
        from_stream(basic_istream<CharT, Traits>& is, const CharT* fmt,
                    month& m, basic_string<CharT, Traits, Alloc>* abbrev = nullptr,
                    minutes* offset = nullptr);
    // класс year
    class year;
    constexpr bool operator==(const year& x, const year& y) noexcept;
    constexpr strong_ordering operator<=>(const year& x, const year& y) noexcept;
    constexpr year  operator+(const year&  x, const years& y) noexcept;
    constexpr year  operator+(const years& x, const year&  y) noexcept;
    constexpr year  operator-(const year&  x, const years& y) noexcept;
    constexpr years operator-(const year&  x, const year&  y) noexcept;
    template<class CharT, class Traits>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const year& y);
    template<class CharT, class Traits, class Alloc = allocator<CharT>>
      basic_istream<CharT, Traits>&
        from_stream(basic_istream<CharT, Traits>& is, const CharT* fmt,
                    year& y, basic_string<CharT, Traits, Alloc>* abbrev = nullptr,
                    minutes* offset = nullptr);
    // класс weekday
    class weekday;
    constexpr bool operator==(const weekday& x, const weekday& y) noexcept;
    constexpr weekday operator+(const weekday& x, const days&    y) noexcept;
    constexpr weekday operator+(const days&    x, const weekday& y) noexcept;
    constexpr weekday operator-(const weekday& x, const days&    y) noexcept;
    constexpr days    operator-(const weekday& x, const weekday& y) noexcept;
    template<class CharT, class Traits>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const weekday& wd);
    template<class CharT, class Traits, class Alloc = allocator<CharT>>
      basic_istream<CharT, Traits>&
        from_stream(basic_istream<CharT, Traits>& is, const CharT* fmt,
                    weekday& wd, basic_string<CharT, Traits, Alloc>* abbrev = nullptr,
                    minutes* offset = nullptr);
    // class weekday_indexed
    class weekday_indexed;
    constexpr bool operator==(const weekday_indexed& x, const weekday_indexed& y) noexcept;
    template<class CharT, class Traits>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const weekday_indexed& wdi);
    // class weekday_last
    class weekday_last;
    constexpr bool operator==(const weekday_last& x, const weekday_last& y) noexcept;
    template<class CharT, class Traits>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const weekday_last& wdl);
    // класс month_day
    class month_day;
    constexpr bool operator==(const month_day& x, const month_day& y) noexcept;
    constexpr strong_ordering operator<=>(const month_day& x, const month_day& y) noexcept;
    template<class CharT, class Traits>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const month_day& md);
    template<class CharT, class Traits, class Alloc = allocator<CharT>>
      basic_istream<CharT, Traits>&
        from_stream(basic_istream<CharT, Traits>& is, const CharT* fmt,
                    month_day& md, basic_string<CharT, Traits, Alloc>* abbrev = nullptr,
                    minutes* offset = nullptr);
    // class month_day_last
    class month_day_last;
    constexpr bool operator==(const month_day_last& x, const month_day_last& y) noexcept;
    constexpr strong_ordering operator<=>(const month_day_last& x,
                                          const month_day_last& y) noexcept;
    template<class CharT, class Traits>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const month_day_last& mdl);
    // class month_weekday
    class month_weekday;
    constexpr bool operator==(const month_weekday& x, const month_weekday& y) noexcept;
    template<class CharT, class Traits>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const month_weekday& mwd);
    // class month_weekday_last
    class month_weekday_last;
    constexpr bool operator==(const month_weekday_last& x, const month_weekday_last& y) noexcept;
    template<class CharT, class Traits>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const month_weekday_last& mwdl);
    // класс year_month
    class year_month;
    constexpr bool operator==(const year_month& x, const year_month& y) noexcept;
    constexpr strong_ordering operator<=>(const year_month& x, const year_month& y) noexcept;
    constexpr year_month operator+(const year_month& ym, const months& dm) noexcept;
    constexpr year_month operator+(const months& dm, const year_month& ym) noexcept;
    constexpr year_month operator-(const year_month& ym, const months& dm) noexcept;
    constexpr months operator-(const year_month& x, const year_month& y) noexcept;
    constexpr year_month operator+(const year_month& ym, const years& dy) noexcept;
    constexpr year_month operator+(const years& dy, const year_month& ym) noexcept;
    constexpr year_month operator-(const year_month& ym, const years& dy) noexcept;
    template<class CharT, class Traits>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const year_month& ym);
    template<class CharT, class Traits, class Alloc = allocator<CharT>>
      basic_istream<CharT, Traits>&
        from_stream(basic_istream<CharT, Traits>& is, const CharT* fmt,
                    year_month& ym, basic_string<CharT, Traits, Alloc>* abbrev = nullptr,
                    minutes* offset = nullptr);
    // класс year_month_day
    class year_month_day;
    constexpr bool operator==(const year_month_day& x, const year_month_day& y) noexcept;
    constexpr strong_ordering operator<=>(const year_month_day& x,
                                          const year_month_day& y) noexcept;
    constexpr year_month_day operator+(const year_month_day& ymd, const months& dm) noexcept;
    constexpr year_month_day operator+(const months& dm, const year_month_day& ymd) noexcept;
    constexpr year_month_day operator+(const year_month_day& ymd, const years& dy) noexcept;
    constexpr year_month_day operator+(const years& dy, const year_month_day& ymd) noexcept;
    constexpr year_month_day operator-(const year_month_day& ymd, const months& dm) noexcept;
    constexpr year_month_day operator-(const year_month_day& ymd, const years& dy) noexcept;
    template<class CharT, class Traits>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const year_month_day& ymd);
    template<class CharT, class Traits, class Alloc = allocator<CharT>>
      basic_istream<CharT, Traits>&
        from_stream(basic_istream<CharT, Traits>& is, const CharT* fmt,
                    year_month_day& ymd,
                    basic_string<CharT, Traits, Alloc>* abbrev = nullptr,
                    minutes* offset = nullptr);
    // класс year_month_day_last
    class year_month_day_last;
    constexpr bool operator==(const year_month_day_last& x,
                              const year_month_day_last& y) noexcept;
    constexpr strong_ordering operator<=>(const year_month_day_last& x,
                                          const year_month_day_last& y) noexcept;
    constexpr year_month_day_last
      operator+(const year_month_day_last& ymdl, const months& dm) noexcept;
    constexpr year_month_day_last
      operator+(const months& dm, const year_month_day_last& ymdl) noexcept;
    constexpr year_month_day_last
      operator+(const year_month_day_last& ymdl, const years& dy) noexcept;
    constexpr year_month_day_last
      operator+(const years& dy, const year_month_day_last& ymdl) noexcept;
    constexpr year_month_day_last
      operator-(const year_month_day_last& ymdl, const months& dm) noexcept;
    constexpr year_month_day_last
      operator-(const year_month_day_last& ymdl, const years& dy) noexcept;
    template<class CharT, class Traits>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const year_month_day_last& ymdl);
    // класс year_month_weekday
    class year_month_weekday;
    constexpr bool operator==(const year_month_weekday& x,
                              const year_month_weekday& y) noexcept;
    constexpr year_month_weekday
      operator+(const year_month_weekday& ymwd, const months& dm) noexcept;
    constexpr year_month_weekday
      operator+(const months& dm, const year_month_weekday& ymwd) noexcept;
    constexpr year_month_weekday
      operator+(const year_month_weekday& ymwd, const years& dy) noexcept;
    constexpr year_month_weekday
      operator+(const years& dy, const year_month_weekday& ymwd) noexcept;
    constexpr year_month_weekday
      operator-(const year_month_weekday& ymwd, const months& dm) noexcept;
    constexpr year_month_weekday
      operator-(const year_month_weekday& ymwd, const years& dy) noexcept;
    template<class CharT, class Traits>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const year_month_weekday& ymwdi);
    // класс year_month_weekday_last
    class year_month_weekday_last;
    constexpr bool operator==(const year_month_weekday_last& x,
                              const year_month_weekday_last& y) noexcept;
    constexpr year_month_weekday_last
      operator+(const year_month_weekday_last& ymwdl, const months& dm) noexcept;
    constexpr year_month_weekday_last
      operator+(const months& dm, const year_month_weekday_last& ymwdl) noexcept;
    constexpr year_month_weekday_last
      operator+(const year_month_weekday_last& ymwdl, const years& dy) noexcept;
    constexpr year_month_weekday_last
      operator+(const years& dy, const year_month_weekday_last& ymwdl) noexcept;
    constexpr year_month_weekday_last
      operator-(const year_month_weekday_last& ymwdl, const months& dm) noexcept;
    constexpr year_month_weekday_last
      operator-(const year_month_weekday_last& ymwdl, const years& dy) noexcept;
    template<class CharT, class Traits>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const year_month_weekday_last& ymwdl);
    // операторы синтаксиса гражданского календаря
    constexpr year_month
      operator/(const year& y, const month& m) noexcept;
    constexpr year_month
      operator/(const year& y, int m) noexcept;
    constexpr month_day
      operator/(const month& m, const day& d) noexcept;
    constexpr month_day
      operator/(const month& m, int d) noexcept;
    constexpr month_day
      operator/(int m, const day& d) noexcept;
    constexpr month_day
      operator/(const day& d, const month& m) noexcept;
    constexpr month_day
      operator/(const day& d, int m) noexcept;
    constexpr month_day_last
      operator/(const month& m, last_spec) noexcept;
    constexpr month_day_last
      operator/(int m, last_spec) noexcept;
    constexpr month_day_last
      operator/(last_spec, const month& m) noexcept;
    constexpr month_day_last
      operator/(last_spec, int m) noexcept;
    constexpr month_weekday
      operator/(const month& m, const weekday_indexed& wdi) noexcept;
    constexpr month_weekday
      operator/(int m, const weekday_indexed& wdi) noexcept;
    constexpr month_weekday
      operator/(const weekday_indexed& wdi, const month& m) noexcept;
    constexpr month_weekday
      operator/(const weekday_indexed& wdi, int m) noexcept;
    constexpr month_weekday_last
      operator/(const month& m, const weekday_last& wdl) noexcept;
    constexpr month_weekday_last
      operator/(int m, const weekday_last& wdl) noexcept;
    constexpr month_weekday_last
      operator/(const weekday_last& wdl, const month& m) noexcept;
    constexpr month_weekday_last
      operator/(const weekday_last& wdl, int m) noexcept;
    constexpr year_month_day
      operator/(const year_month& ym, const day& d) noexcept;
    constexpr year_month_day
      operator/(const year_month& ym, int d) noexcept;
    constexpr year_month_day
      operator/(const year& y, const month_day& md) noexcept;
    constexpr year_month_day
      operator/(int y, const month_day& md) noexcept;
    constexpr year_month_day
      operator/(const month_day& md, const year& y) noexcept;
    constexpr year_month_day
      operator/(const month_day& md, int y) noexcept;
    constexpr year_month_day_last
      operator/(const year_month& ym, last_spec) noexcept;
    constexpr year_month_day_last
      operator/(const year& y, const month_day_last& mdl) noexcept;
    constexpr year_month_day_last
      operator/(int y, const month_day_last& mdl) noexcept;
    constexpr year_month_day_last
      operator/(const month_day_last& mdl, const year& y) noexcept;
    constexpr year_month_day_last
      operator/(const month_day_last& mdl, int y) noexcept;
    constexpr year_month_weekday
      operator/(const year_month& ym, const weekday_indexed& wdi) noexcept;
    constexpr year_month_weekday
      operator/(const year& y, const month_weekday& mwd) noexcept;
    constexpr year_month_weekday
      operator/(int y, const month_weekday& mwd) noexcept;
    constexpr year_month_weekday
      operator/(const month_weekday& mwd, const year& y) noexcept;
    constexpr year_month_weekday
      operator/(const month_weekday& mwd, int y) noexcept;
    constexpr year_month_weekday_last
      operator/(const year_month& ym, const weekday_last& wdl) noexcept;
    constexpr year_month_weekday_last
      operator/(const year& y, const month_weekday_last& mwdl) noexcept;
    constexpr year_month_weekday_last
      operator/(int y, const month_weekday_last& mwdl) noexcept;
    constexpr year_month_weekday_last
      operator/(const month_weekday_last& mwdl, const year& y) noexcept;
    constexpr year_month_weekday_last
      operator/(const month_weekday_last& mwdl, int y) noexcept;
    // шаблон класса hh_mm_ss
    template<class Duration> class hh_mm_ss;
    template<class CharT, class Traits, class Duration>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const hh_mm_ss<Duration>& hms);
    // Функции 12/24 часового формата
    constexpr bool is_am(const hours& h) noexcept;
    constexpr bool is_pm(const hours& h) noexcept;
    constexpr hours make12(const hours& h) noexcept;
    constexpr hours make24(const hours& h, bool is_pm) noexcept;
    // база данных часовых поясов
    struct tzdb;
    class tzdb_list;
    // доступ к базе данных часовых поясов
    const tzdb& get_tzdb();
    tzdb_list& get_tzdb_list();
    const time_zone* locate_zone(string_view tz_name);
    const time_zone* current_zone();
    // поддержка удаленной базы данных часовых поясов
    const tzdb& reload_tzdb();
    string remote_version();
    // классы исключений
    class nonexistent_local_time;
    class ambiguous_local_time;
    // классы информации
    struct sys_info;
    template<class CharT, class Traits>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const sys_info& si);
    struct local_info;
    template<class CharT, class Traits>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os, const local_info& li);
    // class time_zone
    enum class choose {earliest, latest};
    class time_zone;
    bool operator==(const time_zone& x, const time_zone& y) noexcept;
    strong_ordering operator<=>(const time_zone& x, const time_zone& y) noexcept;
    // шаблон класса zoned_traits
    template<class T> struct zoned_traits;
    // шаблон класса zoned_time
    template<class Duration, class TimeZonePtr = const time_zone*> class zoned_time;
    using zoned_seconds = zoned_time<seconds>;
    template<class Duration1, class Duration2, class TimeZonePtr>
      bool operator==(const zoned_time<Duration1, TimeZonePtr>& x,
                      const zoned_time<Duration2, TimeZonePtr>& y);
    template<class CharT, class Traits, class Duration, class TimeZonePtr>
      basic_ostream<CharT, Traits>&
        operator<<(basic_ostream<CharT, Traits>& os,
                   const zoned_time<Duration, TimeZonePtr>& t);
    // поддержка високосной секунды
    class leap_second;
    bool operator==(const leap_second& x, const leap_second& y);
    strong_ordering operator<=>(const leap_second& x, const leap_second& y);
    template<class Duration>
      constexpr bool operator==(const leap_second& x, const sys_time<Duration>& y);
    template<class Duration>
      constexpr bool operator< (const leap_second& x, const sys_time<Duration>& y);
    template<class Duration>
      constexpr bool operator< (const sys_time<Duration>& x, const leap_second& y);
    template<class Duration>
      constexpr bool operator> (const leap_second& x, const sys_time<Duration>& y);
    template<class Duration>
      constexpr bool operator> (const sys_time<Duration>& x, const leap_second& y);
    template<class Duration>
      constexpr bool operator<=(const leap_second& x, const sys_time<Duration>& y);
    template<class Duration>
      constexpr bool operator<=(const sys_time<Duration>& x, const leap_second& y);
    template<class Duration>
      constexpr bool operator>=(const leap_second& x, const sys_time<Duration>& y);
    template<class Duration>
      constexpr bool operator>=(const sys_time<Duration>& x, const leap_second& y);
    template<class Duration>
      requires three_way_comparable_with<sys_seconds, sys_time<Duration>>
      constexpr auto operator<=>(const leap_second& x, const sys_time<Duration>& y);
    // class time_zone_link
    class time_zone_link;
    bool operator==(const time_zone_link& x, const time_zone_link& y);
    strong_ordering operator<=>(const time_zone_link& x, const time_zone_link& y);
    // форматирование
    template<class Duration> struct /*local-time-format-t*/;    // только для демонстрации
    template<class Duration>
      /*local-time-format-t*/<Duration>
        local_time_format(local_time<Duration> time, const string* abbrev = nullptr,
                          const seconds* offset_sec = nullptr);
  }
  template<class Rep, class Period, class CharT>
    struct formatter<chrono::длительность<Rep, Period>, CharT>;
  template<class Duration, class CharT>
    struct formatter<chrono::sys_time<Duration>, CharT>;
  template<class Duration, class CharT>
    struct formatter<chrono::utc_time<Duration>, CharT>;
  template<class Duration, class CharT>
    struct formatter<chrono::tai_time<Duration>, CharT>;
  template<class Duration, class CharT>
    struct formatter<chrono::gps_time<Duration>, CharT>;
  template<class Duration, class CharT>
    struct formatter<chrono::file_time<Duration>, CharT>;
  template<class Duration, class CharT>
    struct formatter<chrono::локальное время<Duration>, CharT>;
  template<class Duration, class CharT>
    struct formatter<chrono::/*local-time-format-t*/<Duration>, CharT>;
  template<class CharT> struct formatter<chrono::день, CharT>;
  template<class CharT> struct formatter<chrono::месяц, CharT>;
  template<class CharT> struct formatter<chrono::год, CharT>;
  template<class CharT> struct formatter<chrono::день недели, CharT>;
  template<class CharT> struct formatter<chrono::weekday_indexed, CharT>;
  template<class CharT> struct formatter<chrono::weekday_last, CharT>;
  template<class CharT> struct formatter<chrono::month_day, CharT>;
  template<class CharT> struct formatter<chrono::month_day_last, CharT>;
  template<class CharT> struct formatter<chrono::month_weekday, CharT>;
  template<class CharT> struct formatter<chrono::month_weekday_last, CharT>;
  template<class CharT> struct formatter<chrono::year_month, CharT>;
  template<class CharT> struct formatter<chrono::year_month_day, CharT>;
  template<class CharT> struct formatter<chrono::year_month_day_last, CharT>;
  template<class CharT> struct formatter<chrono::year_month_weekday, CharT>;
  template<class CharT> struct formatter<chrono::year_month_weekday_last, CharT>;
  template<class Rep, class Period, class CharT>
    struct formatter<chrono::hh_mm_ss<duration<Rep, Period>>, CharT>;
  template<class CharT> struct formatter<chrono::sys_info, CharT>;
  template<class CharT> struct formatter<chrono::локальная_информация, CharT>;
  template<class Duration, class TimeZonePtr, class CharT>
    struct formatter<chrono::zoned_time<Duration, TimeZonePtr>, CharT>;
  namespace chrono {
    // парсинг
    template<class CharT, class Parsable>
      /* не указано */
        parse(const CharT* fmt, Parsable& tp);
    template<class CharT, class Traits, class Alloc, class Parsable>
      /* не указано */
        parse(const basic_string<CharT, Traits, Alloc>& format, Parsable& tp);
    template<class CharT, class traits, class Alloc, class Parsable>
      /* не указано */
        parse(const CharT* fmt, Parsable& tp,
              basic_string<CharT, traits, Alloc>& abbrev);
    template<class CharT, class Traits, class Alloc, class Parsable>
      /* не указано */
        parse(const basic_string<CharT, Traits, Alloc>& format, Parsable& tp,
              basic_string<CharT, Traits, Alloc>& abbrev);
    template<class CharT, class Parsable>
      /* не указано */
        parse(const CharT* fmt, Parsable& tp, minutes& offset);
    template<class CharT, class Traits, class Alloc, class Parsable>
      /* не указано */
        parse(const basic_string<CharT, Traits, Alloc>& format, Parsable& tp,
              minutes& offset);
    template<class CharT, class traits, class Alloc, class Parsable>
      /* не указано */
        parse(const CharT* fmt, Parsable& tp,
              basic_string<CharT, traits, Alloc>& abbrev, minutes& offset);
    template<class CharT, class Traits, class Alloc, class Parsable>
      /* не указано */
        parse(const basic_string<CharT, Traits, Alloc>& format, Parsable& tp,
              basic_string<CharT, Traits, Alloc>& abbrev, minutes& offset);
    // календарные константы
    inline constexpr last_spec last{};
    inline constexpr weekday Sunday{0};
    inline constexpr weekday Monday{1};
    inline constexpr weekday Tuesday{2};
    inline constexpr weekday Wednesday{3};
    inline constexpr weekday Thursday{4};
    inline constexpr weekday Friday{5};
    inline constexpr weekday Saturday{6};
    inline constexpr month January{1};
    inline constexpr month February{2};
    inline constexpr month March{3};
    inline constexpr month April{4};
    inline constexpr month May{5};
    inline constexpr month June{6};
    inline constexpr month July{7};
    inline constexpr month August{8};
    inline constexpr month September{9};
    inline constexpr month October{10};
    inline constexpr month November{11};
    inline constexpr month December{12};
  }
  inline namespace literals {
  inline namespace chrono_literals {
    // суффиксы для литералов длительности
    constexpr chrono::часы                    operator""h(unsigned long long);
    constexpr chrono::длительность</* не указано */,
                               ratio<3600, 1>> operator""h(long double);
    constexpr chrono::минуты                operator""min(unsigned long long);
    constexpr chrono::длительность</* не указано */,
                               ratio<60, 1>> operator""min(long double);
    constexpr chrono::секунд                     operator""s(unsigned long long);
    constexpr chrono::длительность</* не указано */> operator""s(long double);
    constexpr chrono::миллисекунды                       operator""ms(unsigned long long);
    constexpr chrono::длительность</* не указано */, milli> operator""ms(long double);
    constexpr chrono::микросекунды                       operator""us(unsigned long long);
    constexpr chrono::длительность</* не указано */, micro> operator""us(long double);
    constexpr chrono::наносекунды                       operator""ns(unsigned long long);
    constexpr chrono::длительность</* не указано */, nano> operator""ns(long double);
    // нечленные функции
    constexpr chrono::день  operator""d(unsigned long long d) noexcept;
    // нечленные функции
    constexpr chrono::год operator""y(unsigned long long y) noexcept;
  }
  }
  namespace chrono {
    using namespace literals::chrono_literals;
  }
  // поддержка хеширования
  template<class T> struct hash;
  template<class Rep, class Period>
    struct hash<chrono::длительность<Rep, Period>>;
  template<class Clock, class Duration>
    struct hash<chrono::time_point<Clock, Duration>>;
  template<> struct hash<chrono::день>;
  template<> struct hash<chrono::месяц>;
  template<> struct hash<chrono::год>;
  template<> struct hash<chrono::день недели>;
  template<> struct hash<chrono::weekday_indexed>;
  template<> struct hash<chrono::weekday_last>;
  template<> struct hash<chrono::month_day>;
  template<> struct hash<chrono::month_day_last>;
  template<> struct hash<chrono::month_weekday>;
  template<> struct hash<chrono::month_weekday_last>;
  template<> struct hash<chrono::год_месяц>;
  template<> struct hash<chrono::year_month_day>;
  template<> struct hash<chrono::year_month_day_last>;
  template<> struct hash<chrono::year_month_weekday>;
  template<> struct hash<chrono::year_month_weekday_last>;
  template<class Duration, class TimeZonePtr>
    struct hash<chrono::zoned_time<Duration, TimeZonePtr>>;
  template<> struct hash<chrono::leap_second>;
}

Шаблон класса std::chrono::duration

namespace std::chrono {
  template<class Rep, class Period = ratio<1>>
  class duration {
  public:
    using rep    = Rep;
    using period = typename Period::type;
  private:
    rep rep_;       // только для демонстрации
  public:
    // конструкторы/копирование/уничтожение
    constexpr duration() = default;
    template<class Rep2>
      constexpr explicit duration(const Rep2& r);
    template<class Rep2, class Period2>
      constexpr duration(const duration<Rep2, Period2>& d);
    ~duration() = default;
    duration(const duration&) = default;
    duration& operator=(const duration&) = default;
    // наблюдатель
    constexpr rep count() const;
    // арифметика
    constexpr common_type_t<duration> operator+() const;
    constexpr common_type_t<duration> operator-() const;
    constexpr duration& operator++();
    constexpr duration  operator++(int);
    constexpr duration& operator--();
    constexpr duration  operator--(int);
    constexpr duration& operator+=(const duration& d);
    constexpr duration& operator-=(const duration& d);
    constexpr duration& operator*=(const rep& rhs);
    constexpr duration& operator/=(const rep& rhs);
    constexpr duration& operator%=(const rep& rhs);
    constexpr duration& operator%=(const duration& rhs);
    // специальные значения
    static constexpr duration zero() noexcept;
    static constexpr duration min() noexcept;
    static constexpr duration max() noexcept;
  };
}

Шаблон класса std::chrono::time_point

namespace std::chrono {
  template<class Clock, class Duration = typename Clock::duration>
  class time_point {
  public:
    using clock    = Clock;
    using duration = Duration;
    using rep      = typename duration::rep;
    using period   = typename duration::period;
  private:
    duration d_;                                                // только для демонстрации
  public:
    // конструкторы
    constexpr time_point();                                     // имеет значение эпохи
    constexpr explicit time_point(const duration& d);           // эквивалентно time_point() + d
    template<class Duration2>
      constexpr time_point(const time_point<clock, Duration2>& t);
    // наблюдатели
    constexpr duration time_since_epoch() const;
    // арифметические операции
    constexpr time_point& operator++();
    constexpr time_point operator++(int);
    constexpr time_point& operator--();
    constexpr time_point operator--(int);
    constexpr time_point& operator+=(const duration& d);
    constexpr time_point& operator-=(const duration& d);
    // специальные значения
    static constexpr time_point min() noexcept;
    static constexpr time_point max() noexcept;
  };
}

Специализация шаблона класса std::common_type для std::chrono::duration

namespace std {
  template<class Rep1, class Period1, class Rep2, class Period2>
    struct common_type<chrono::duration<Rep1, Period1>,
                       chrono::duration<Rep2, Period2>> {
      using type = chrono::duration<common_type_t<Rep1, Rep2>, /* см. описание */>;
    };
}

Специализация шаблона класса std::common_type для std::chrono::time_point

namespace std {
  template<class Clock, class Duration1, class Duration2>
    struct common_type<chrono::time_point<Clock, Duration1>,
                       chrono::time_point<Clock, Duration2>> {
      using type = chrono::time_point<Clock, common_type_t<Duration1, Duration2>>;
    };
}
**Примечание:** Весь код C++ внутри тегов `
` и `` оставлен без изменений, как и требовалось. HTML-теги и атрибуты также сохранены в оригинальном виде.

Шаблон класса std::chrono::treat_as_floating_point

template<class Rep> struct treat_as_floating_point : is_floating_point<Rep> { };

Шаблон класса std::chrono::duration_values

namespace std::chrono {
  template<class Rep>
    struct duration_values {
    public:
      static constexpr Rep zero() noexcept;
      static constexpr Rep min() noexcept;
      static constexpr Rep max() noexcept;
    };
}

Класс std::chrono::system_clock

namespace std::chrono {
  class system_clock {
  public:
    using rep        = /* см. описание */;
    using period     = ratio</* не указано */, /* не указано */>;
    using duration   = chrono::duration<rep, period>;
    using time_point = chrono::time_point<system_clock>;
    static constexpr bool is_steady = /* не указано */;
    static time_point now() noexcept;
    // преобразование в/из C типа time_t
    static time_t      to_time_t  (const time_point& t) noexcept;
    static time_point  from_time_t(time_t t) noexcept;
  };
}

Класс std:: chrono :: utc_clock

namespace std::chrono {
  class utc_clock {
  public:
    using rep                       = /* знаковый арифметический тип */;
    using period                    = ratio</* не указано */, /* не указано */>;
    using duration                  = chrono::duration<rep, period>;
    using time_point                = chrono::time_point<utc_clock>;
    static constexpr bool is_steady = /* не указано */;
    static time_point now();
    template<class Duration>
      static sys_time<common_type_t<Duration, seconds>>
        to_sys(const utc_time<Duration>& t);
    template<class Duration>
      static utc_time<common_type_t<Duration, seconds>>
        from_sys(const sys_time<Duration>& t);
  };
}

Класс std:: chrono :: tai_clock

namespace std::chrono {
  class tai_clock {
  public:
    using rep                       = /* знаковый арифметический тип */;
    using period                    = ratio</* не указано */, /* не указано */>;
    using duration                  = chrono::duration<rep, period>;
    using time_point                = chrono::time_point<tai_clock>;
    static constexpr bool is_steady = /* не указано */;
    static time_point now();
    template<class Duration>
      static sys_time<common_type_t<Duration, seconds>>
        to_sys(const tai_time<Duration>& t);
    template<class Duration>
      static tai_time<common_type_t<Duration, seconds>>
        from_sys(const sys_time<Duration>& t);
  };
}

Класс std:: chrono :: gps_clock

namespace std::chrono {
  class gps_clock {
  public:
    using rep                       = /* a signed arithmetic type */;
    using period                    = ratio</* unspecified */, /* unspecified */>;
    using duration                  = chrono::duration<rep, period>;
    using time_point                = chrono::time_point<gps_clock>;
    static constexpr bool is_steady = /* unspecified */;
    static time_point now();
    template<class Duration>
      static sys_time<common_type_t<Duration, seconds>>
        to_sys(const gps_time<Duration>& t);
    template<class Duration>
      static gps_time<common_type_t<Duration, seconds>>
        from_sys(const sys_time<Duration>& t);
  };
}

Класс std::chrono::steady_clock

namespace std::chrono {
  class steady_clock {
  public:
    using rep        = /* unspecified */;
    using period     = ratio</* unspecified */, /* unspecified */>;
    using duration   = chrono::duration<rep, period>;
    using time_point = chrono::time_point</* unspecified */, duration>;
    static constexpr bool is_steady = true;
    static time_point now() noexcept;
  };
}

Класс std::chrono::high_resolution_clock

namespace std::chrono {
  class high_resolution_clock {
  public:
    using rep        = /* не указано */;
    using period     = ratio</* не указано */, /* не указано */>;
    using duration   = chrono::duration<rep, period>;
    using time_point = chrono::time_point</* не указано */, duration>;
    static constexpr bool is_steady = /* не указано */;
    static time_point now() noexcept;
  };
}

Шаблон класса std:: chrono :: clock_time_conversion

namespace std::chrono {
  template<class DestClock, class SourceClock>
  struct clock_time_conversion {};
  template<class Clock>
  struct clock_time_conversion<Clock, Clock> {
    template<class Duration>
      time_point<Clock, Duration>
        operator()(const time_point<Clock, Duration>& t) const;
  };
  template<>
  struct clock_time_conversion<system_clock, system_clock> {
    template<class Duration>
      sys_time<Duration>
        operator()(const sys_time<Duration>& t) const;
  };
  template<>
  struct clock_time_conversion<utc_clock, utc_clock> {
    template<class Duration>
      utc_time<Duration>
        operator()(const utc_time<Duration>& t) const;
  };
  template<>
  struct clock_time_conversion<utc_clock, system_clock> {
    template<class Duration>
      utc_time<common_type_t<Duration, seconds>>
        operator()(const sys_time<Duration>& t) const;
  };
  template<>
  struct clock_time_conversion<system_clock, utc_clock> {
    template<class Duration>
      sys_time<common_type_t<Duration, seconds>>
        operator()(const utc_time<Duration>& t) const;
  };
  template<class SourceClock>
  struct clock_time_conversion<system_clock, SourceClock> {
    template<class Duration>
      auto operator()(const time_point<SourceClock, Duration>& t) const
        -> decltype(SourceClock::to_sys(t));
  };
  template<class DestClock>
  struct clock_time_conversion<DestClock, system_clock> {
    template<class Duration>
      auto operator()(const sys_time<Duration>& t) const
        -> decltype(DestClock::from_sys(t));
  };
  template<class SourceClock>
  struct clock_time_conversion<utc_clock, SourceClock> {
    template<class Duration>
      auto operator()(const time_point<SourceClock, Duration>& t) const
        -> decltype(SourceClock::to_utc(t));
  };
  template<class DestClock>
  struct clock_time_conversion<DestClock, utc_clock> {
    template<class Duration>
      auto operator()(const utc_time<Duration>& t) const
        -> decltype(DestClock::from_utc(t));
  };
}
**Примечание:** Весь код C++ внутри тегов `
` и `` сохранен без изменений, как и требовалось. HTML-теги и атрибуты также сохранены в оригинальном виде.

Класс std:: chrono :: last_spec

namespace std::chrono {
  struct last_spec {
    explicit last_spec() = default;
  };
}
**Примечание:** Весь код C++ внутри тегов `
` и `` оставлен без изменений, как и требовалось. HTML-теги и атрибуты также сохранены в оригинальном виде.

Класс std:: chrono :: day

namespace std::chrono {
  class day {
    unsigned char d_;           // только для демонстрации
  public:
    day() = default;
    constexpr explicit day(unsigned d) noexcept;
    constexpr day& operator++()    noexcept;
    constexpr day  operator++(int) noexcept;
    constexpr day& operator--()    noexcept;
    constexpr day  operator--(int) noexcept;
    constexpr day& operator+=(const days& d) noexcept;
    constexpr day& operator-=(const days& d) noexcept;
    constexpr explicit operator unsigned() const noexcept;
    constexpr bool ok() const noexcept;
  };
}

Класс std:: chrono :: month

namespace std::chrono {
  class month {
    unsigned char m_;           // только для демонстрации
  public:
    month() = default;
    constexpr explicit month(unsigned m) noexcept;
    constexpr month& operator++()    noexcept;
    constexpr month  operator++(int) noexcept;
    constexpr month& operator--()    noexcept;
    constexpr month  operator--(int) noexcept;
    constexpr month& operator+=(const months& m) noexcept;
    constexpr month& operator-=(const months& m) noexcept;
    constexpr explicit operator unsigned() const noexcept;
    constexpr bool ok() const noexcept;
  };
}

Класс std:: chrono :: year

namespace std::chrono {
  class year {
    short y_;                   // только для демонстрации
  public:
    year() = default;
    constexpr explicit year(int y) noexcept;
    constexpr year& operator++()    noexcept;
    constexpr year  operator++(int) noexcept;
    constexpr year& operator--()    noexcept;
    constexpr year  operator--(int) noexcept;
    constexpr year& operator+=(const years& y) noexcept;
    constexpr year& operator-=(const years& y) noexcept;
    constexpr year operator+() const noexcept;
    constexpr year operator-() const noexcept;
    constexpr bool is_leap() const noexcept;
    constexpr explicit operator int() const noexcept;
    constexpr bool ok() const noexcept;
    static constexpr year min() noexcept;
    static constexpr year max() noexcept;
  };
}

Класс std:: chrono :: weekday

namespace std::chrono {
  class weekday {
    unsigned char wd_;          // только для демонстрации
  public:
    weekday() = default;
    constexpr explicit weekday(unsigned wd) noexcept;
    constexpr weekday(const sys_days& dp) noexcept;
    constexpr explicit weekday(const local_days& dp) noexcept;
    constexpr weekday& operator++()    noexcept;
    constexpr weekday  operator++(int) noexcept;
    constexpr weekday& operator--()    noexcept;
    constexpr weekday  operator--(int) noexcept;
    constexpr weekday& operator+=(const days& d) noexcept;
    constexpr weekday& operator-=(const days& d) noexcept;
    constexpr unsigned c_encoding() const noexcept;
    constexpr unsigned iso_encoding() const noexcept;
    constexpr bool ok() const noexcept;
    constexpr weekday_indexed operator[](unsigned index) const noexcept;
    constexpr weekday_last    operator[](last_spec) const noexcept;
  };
}

Класс std:: chrono :: weekday_indexed

namespace std::chrono {
  class weekday_indexed {
    chrono::weekday  wd_;       // только для демонстрации
    unsigned char    index_;    // только для демонстрации
  public:
    weekday_indexed() = default;
    constexpr weekday_indexed(const chrono::weekday& wd, unsigned index) noexcept;
    constexpr chrono::weekday weekday() const noexcept;
    constexpr unsigned        index()   const noexcept;
    constexpr bool ok() const noexcept;
  };
}

Класс std:: chrono :: weekday_last

namespace std::chrono {
  class weekday_last {
    chrono::weekday wd_;                // только для демонстрации
    public:
    constexpr explicit weekday_last(const chrono::weekday& wd) noexcept;
    constexpr chrono::weekday weekday() const noexcept;
    constexpr bool ok() const noexcept;
  };
}

Класс std:: chrono :: month_day

namespace std::chrono {
  class month_day {
    chrono::month m_;           // только для демонстрации
    chrono::day   d_;           // только для демонстрации
  public:
    month_day() = default;
    constexpr month_day(const chrono::month& m, const chrono::day& d) noexcept;
    constexpr chrono::month month() const noexcept;
    constexpr chrono::day   day()   const noexcept;
    constexpr bool ok() const noexcept;
  };
}

Класс std:: chrono :: month_day_last

namespace std::chrono {
  class month_day_last {
    chrono::month m_;                   // только для экспозиции
  public:
    constexpr explicit month_day_last(const chrono::month& m) noexcept;
    constexpr chrono::month month() const noexcept;
    constexpr bool ok() const noexcept;
  };
}

Класс std:: chrono :: month_weekday

namespace std::chrono {
  class month_weekday {
    chrono::month           m_;         // только для демонстрации
    chrono::weekday_indexed wdi_;       // только для демонстрации
  public:
    constexpr month_weekday(const chrono::month& m,
                            const chrono::weekday_indexed& wdi) noexcept;
    constexpr chrono::month           month()           const noexcept;
    constexpr chrono::weekday_indexed weekday_indexed() const noexcept;
    constexpr bool ok() const noexcept;
  };
}

Класс std:: chrono :: month_weekday_last

namespace std::chrono {
  class month_weekday_last {
    chrono::month        m_;    // только для демонстрации
    chrono::weekday_last wdl_;  // только для демонстрации
  public:
    constexpr month_weekday_last(const chrono::month& m,
                                 const chrono::weekday_last& wdl) noexcept;
    constexpr chrono::month        month()        const noexcept;
    constexpr chrono::weekday_last weekday_last() const noexcept;
    constexpr bool ok() const noexcept;
  };
}

Класс std:: chrono :: year_month

namespace std::chrono {
  class year_month {
    chrono::year  y_;           // только для демонстрации
    chrono::month m_;           // только для демонстрации
  public:
    year_month() = default;
    constexpr year_month(const chrono::year& y, const chrono::month& m) noexcept;
    constexpr chrono::year  year()  const noexcept;
    constexpr chrono::month month() const noexcept;
    constexpr year_month& operator+=(const months& dm) noexcept;
    constexpr year_month& operator-=(const months& dm) noexcept;
    constexpr year_month& operator+=(const years& dy)  noexcept;
    constexpr year_month& operator-=(const years& dy)  noexcept;
    constexpr bool ok() const noexcept;
  };
}

Класс std:: chrono :: year_month_day

namespace std::chrono {
  class year_month_day {
    chrono::year  y_;           // только для демонстрации
    chrono::month m_;           // только для демонстрации
    chrono::day   d_;           // только для демонстрации
  public:
    year_month_day() = default;
    constexpr year_month_day(const chrono::year& y, const chrono::month& m,
                             const chrono::day& d) noexcept;
    constexpr year_month_day(const year_month_day_last& ymdl) noexcept;
    constexpr year_month_day(const sys_days& dp) noexcept;
    constexpr explicit year_month_day(const local_days& dp) noexcept;
    constexpr year_month_day& operator+=(const months& m) noexcept;
    constexpr year_month_day& operator-=(const months& m) noexcept;
    constexpr year_month_day& operator+=(const years& y)  noexcept;
    constexpr year_month_day& operator-=(const years& y)  noexcept;
    constexpr chrono::year  year()  const noexcept;
    constexpr chrono::month month() const noexcept;
    constexpr chrono::day   day()   const noexcept;
    constexpr          operator sys_days()   const noexcept;
    constexpr explicit operator local_days() const noexcept;
    constexpr bool ok() const noexcept;
  };
}

Класс std:: chrono :: year_month_day_last

namespace std::chrono {
  class year_month_day_last {
    chrono::year           y_;          // только для демонстрации
    chrono::month_day_last mdl_;        // только для демонстрации
  public:
    constexpr year_month_day_last(const chrono::year& y,
                                  const chrono::month_day_last& mdl) noexcept;
    constexpr year_month_day_last& operator+=(const months& m) noexcept;
    constexpr year_month_day_last& operator-=(const months& m) noexcept;
    constexpr year_month_day_last& operator+=(const years& y)  noexcept;
    constexpr year_month_day_last& operator-=(const years& y)  noexcept;
    constexpr chrono::year           year()           const noexcept;
    constexpr chrono::month          month()          const noexcept;
    constexpr chrono::month_day_last month_day_last() const noexcept;
    constexpr chrono::day            day()            const noexcept;
    constexpr          operator sys_days()   const noexcept;
    constexpr explicit operator local_days() const noexcept;
    constexpr bool ok() const noexcept;
  };
}

Класс std:: chrono :: year_month_weekday

namespace std::chrono {
  class year_month_weekday {
    chrono::year            y_;         // только для демонстрации
    chrono::month           m_;         // только для демонстрации
    chrono::weekday_indexed wdi_;       // только для демонстрации
  public:
    year_month_weekday() = default;
    constexpr year_month_weekday(const chrono::year& y, const chrono::month& m,
                                 const chrono::weekday_indexed& wdi) noexcept;
    constexpr year_month_weekday(const sys_days& dp) noexcept;
    constexpr explicit year_month_weekday(const local_days& dp) noexcept;
    constexpr year_month_weekday& operator+=(const months& m) noexcept;
    constexpr year_month_weekday& operator-=(const months& m) noexcept;
    constexpr year_month_weekday& operator+=(const years& y)  noexcept;
    constexpr year_month_weekday& operator-=(const years& y)  noexcept;
    constexpr chrono::year            year()            const noexcept;
    constexpr chrono::month           month()           const noexcept;
    constexpr chrono::weekday         weekday()         const noexcept;
    constexpr unsigned                index()           const noexcept;
    constexpr chrono::weekday_indexed weekday_indexed() const noexcept;
    constexpr          operator sys_days()   const noexcept;
    constexpr explicit operator local_days() const noexcept;
    constexpr bool ok() const noexcept;
  };
}

Класс std:: chrono :: year_month_weekday_last

namespace std::chrono {
  class year_month_weekday_last {
    chrono::year         y_;    // только для демонстрации
    chrono::month        m_;    // только для демонстрации
    chrono::weekday_last wdl_;  // только для демонстрации
  public:
    constexpr year_month_weekday_last(const chrono::year& y, const chrono::month& m,
                                      const chrono::weekday_last& wdl) noexcept;
    constexpr year_month_weekday_last& operator+=(const months& m) noexcept;
    constexpr year_month_weekday_last& operator-=(const months& m) noexcept;
    constexpr year_month_weekday_last& operator+=(const years& y)  noexcept;
    constexpr year_month_weekday_last& operator-=(const years& y)  noexcept;
    constexpr chrono::year         year()         const noexcept;
    constexpr chrono::month        month()        const noexcept;
    constexpr chrono::weekday      weekday()      const noexcept;
    constexpr chrono::weekday_last weekday_last() const noexcept;
    constexpr          operator sys_days()   const noexcept;
    constexpr explicit operator local_days() const noexcept;
    constexpr bool ok() const noexcept;
  };
}

Шаблон класса std::chrono::hh_mm_ss

namespace std::chrono {
  template<class Duration> class hh_mm_ss {
  public:
    static constexpr unsigned fractional_width = /* см. описание */;
    using precision                            = /* см. описание */;
    constexpr hh_mm_ss() noexcept : hh_mm_ss{Duration::zero()} {}
    constexpr explicit hh_mm_ss(Duration d);
    constexpr bool is_negative() const noexcept;
    constexpr chrono::hours hours() const noexcept;
    constexpr chrono::minutes minutes() const noexcept;
    constexpr chrono::seconds seconds() const noexcept;
    constexpr precision subseconds() const noexcept;
    constexpr explicit operator precision() const noexcept;
    constexpr precision to_duration() const noexcept;
  private:
    bool            is_neg;     // только для демонстрации
    chrono::hours   h;          // только для демонстрации
    chrono::minutes m;          // только для демонстрации
    chrono::seconds s;          // только для демонстрации
    precision       ss;         // только для демонстрации
  };
}

Класс std:: chrono :: tzdb

namespace std::chrono {
  struct tzdb {
    string                 version;
    vector<time_zone>      zones;
    vector<time_zone_link> links;
    vector<leap_second>    leap_seconds;
    const time_zone* locate_zone(string_view tz_name) const;
    const time_zone* current_zone() const;
  };
}
**Примечание:** Весь код C++ внутри тегов `
` и `` оставлен без изменений, как и требовалось. HTML-теги и атрибуты также сохранены в оригинальном виде.

Класс std:: chrono :: tzdb_list

namespace std::chrono {
  class tzdb_list {
  public:
    tzdb_list(const tzdb_list&) = delete;
    tzdb_list& operator=(const tzdb_list&) = delete;
    // неуточненные дополнительные конструкторы
    class const_iterator;
    const tzdb& front() const noexcept;
    const_iterator erase_after(const_iterator p);
    const_iterator begin() const noexcept;
    const_iterator end()   const noexcept;
    const_iterator cbegin() const noexcept;
    const_iterator cend()   const noexcept;
  };
}

Класс std:: chrono :: nonexistent_local_time

namespace std::chrono {
  class nonexistent_local_time : public runtime_error {
  public:
    template<class Duration>
      nonexistent_local_time(const local_time<Duration>& tp, const local_info& i);
  };
}

Класс std:: chrono :: ambiguous_local_time

namespace std::chrono {
  class ambiguous_local_time : public runtime_error {
  public:
    template<class Duration>
      ambiguous_local_time(const local_time<Duration>& tp, const local_info& i);
  };
}

Класс std:: chrono :: sys_info

namespace std::chrono {
  struct sys_info {
    sys_seconds   begin;
    sys_seconds   end;
    seconds       offset;
    minutes       save;
    string        abbrev;
  };
}

Класс std:: chrono :: local_info

namespace std::chrono {
  struct local_info {
    static constexpr int unique      = 0;
    static constexpr int nonexistent = 1;
    static constexpr int ambiguous   = 2;
    int result;
    sys_info first;
    sys_info second;
  };
}

Класс std:: chrono :: time_zone

namespace std::chrono {
  class time_zone {
  public:
    time_zone(time_zone&&) = default;
    time_zone& operator=(time_zone&&) = default;
    // неопределенные дополнительные конструкторы
    string_view name() const noexcept;
    template<class Duration> sys_info   get_info(const sys_time<Duration>& st)   const;
    template<class Duration> local_info get_info(const local_time<Duration>& tp) const;
    template<class Duration>
      sys_time<common_type_t<Duration, seconds>>
        to_sys(const local_time<Duration>& tp) const;
    template<class Duration>
      sys_time<common_type_t<Duration, seconds>>
        to_sys(const local_time<Duration>& tp, choose z) const;
    template<class Duration>
      local_time<common_type_t<Duration, seconds>>
        to_local(const sys_time<Duration>& tp) const;
  };
}

Шаблон класса std:: chrono :: zoned_traits

namespace std::chrono {
  template<class T> struct zoned_traits {};
  template<> struct zoned_traits<const time_zone*> {
    static const time_zone* default_zone();
    static const time_zone* locate_zone(string_view name);
  };
}
**Примечание:** Весь код C++ внутри тегов `
` и `` оставлен без изменений, как и требовалось. HTML-разметка и атрибуты также сохранены в оригинальном виде.

Шаблон класса std:: chrono :: zoned_time

namespace std::chrono {
  template<class Duration, class TimeZonePtr = const time_zone*>
  class zoned_time {
  public:
    using duration = common_type_t<Duration, seconds>;
  private:
    TimeZonePtr        zone_;                   // только для демонстрации
    sys_time<duration> tp_;                     // только для демонстрации
    using traits = zoned_traits<TimeZonePtr>;   // только для демонстрации
  public:
    zoned_time();
    zoned_time(const zoned_time&) = default;
    zoned_time& operator=(const zoned_time&) = default;
    zoned_time(const sys_time<Duration>& st);
    explicit zoned_time(TimeZonePtr z);
    explicit zoned_time(string_view name);
    template<class Duration2>
      zoned_time(const zoned_time<Duration2, TimeZonePtr>& zt);
    zoned_time(TimeZonePtr z,    const sys_time<Duration>& st);
    zoned_time(string_view name, const sys_time<Duration>& st);
    zoned_time(TimeZonePtr z,    const local_time<Duration>& tp);
    zoned_time(string_view name, const local_time<Duration>& tp);
    zoned_time(TimeZonePtr z,    const local_time<Duration>& tp, choose c);
    zoned_time(string_view name, const local_time<Duration>& tp, choose c);
    template<class Duration2, class TimeZonePtr2>
      zoned_time(TimeZonePtr z, const zoned_time<Duration2, TimeZonePtr2>& zt);
    template<class Duration2, class TimeZonePtr2>
      zoned_time(TimeZonePtr z, const zoned_time<Duration2, TimeZonePtr2>& zt, choose);
    template<class Duration2, class TimeZonePtr2>
      zoned_time(string_view name, const zoned_time<Duration2, TimeZonePtr2>& zt);
    template<class Duration2, class TimeZonePtr2>
      zoned_time(string_view name, const zoned_time<Duration2, TimeZonePtr2>& zt, choose);
    zoned_time& operator=(const sys_time<Duration>& st);
    zoned_time& operator=(const local_time<Duration>& ut);
    operator sys_time<duration>() const;
    explicit operator local_time<duration>() const;
    TimeZonePtr          get_time_zone()  const;
    local_time<duration> get_local_time() const;
    sys_time<duration>   get_sys_time()   const;
    sys_info             get_info()       const;
  };
  zoned_time() -> zoned_time<seconds>;
  template<class Duration>
    zoned_time(sys_time<Duration>)
      -> zoned_time<common_type_t<Duration, seconds>>;
  template<class TimeZonePtrOrName>
    using /*представление-часового-пояса*/ =        // только для демонстрации
      conditional_t<is_convertible_v<TimeZonePtrOrName, string_view>,
                    const time_zone*,
                    remove_cvref_t<TimeZonePtrOrName>>;
  template<class TimeZonePtrOrName>
    zoned_time(TimeZonePtrOrName&&)
      -> zoned_time<seconds, /*представление-часового-пояса*/<TimeZonePtrOrName>>;
  template<class TimeZonePtrOrName, class Duration>
    zoned_time(TimeZonePtrOrName&&, sys_time<Duration>)
      -> zoned_time<common_type_t<Duration, seconds>,
                    /*представление-часового-пояса*/<TimeZonePtrOrName>>;
  template<class TimeZonePtrOrName, class Duration>
    zoned_time(TimeZonePtrOrName&&, local_time<Duration>,
               choose = choose::самый ранний)
      -> zoned_time<common_type_t<Duration, seconds>,
                    /*представление-часового-пояса*/<TimeZonePtrOrName>>;
  template<class Duration, class TimeZonePtrOrName, class TimeZonePtr2>
    zoned_time(TimeZonePtrOrName&&, zoned_time<Duration, TimeZonePtr2>,
               choose = choose::самый ранний)
      -> zoned_time<common_type_t<Duration, seconds>,
                    /*представление-часового-пояса*/<TimeZonePtrOrName>>;
}

Класс std::chrono::leap_second

namespace std::chrono {
  class leap_second {
  public:
    leap_second(const leap_second&)            = default;
    leap_second& operator=(const leap_second&) = default;
    // неуказанные дополнительные конструкторы
    constexpr sys_seconds date() const noexcept;
    constexpr seconds value() const noexcept;
  };
}

Класс std::chrono::time_zone_link

namespace std::chrono {
  class time_zone_link {
  public:
    time_zone_link(time_zone_link&&)            = default;
    time_zone_link& operator=(time_zone_link&&) = default;
    // неопределенные дополнительные конструкторы
    string_view name()   const noexcept;
    string_view target() const noexcept;
  };
}

Шаблон класса local-time-format-t

namespace std::chrono {
  template<class Duration> struct /*local-time-format-t*/ {       // только для демонстрации
    local_time<Duration> time;                                    // только для демонстрации
    const string* abbrev;                                         // только для демонстрации
    const seconds* offset_sec;                                    // только для демонстрации
  };
}