Back to home page

EIC code displayed by LXR

 
 

    


Warning, /include/c++/v1/chrono is written in an unsupported language. File is not indexed.

0001 // -*- C++ -*-
0002 //===----------------------------------------------------------------------===//
0003 //
0004 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
0005 // See https://llvm.org/LICENSE.txt for license information.
0006 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
0007 //
0008 //===----------------------------------------------------------------------===//
0009 
0010 #ifndef _LIBCPP_CHRONO
0011 #define _LIBCPP_CHRONO
0012 
0013 // clang-format off
0014 
0015 /*
0016     chrono synopsis
0017 
0018 #include <compare> // C++20
0019 
0020 namespace std
0021 {
0022 namespace chrono
0023 {
0024 
0025 template <class ToDuration, class Rep, class Period>
0026 constexpr
0027 ToDuration
0028 duration_cast(const duration<Rep, Period>& fd);
0029 
0030 template <class Rep> struct treat_as_floating_point : is_floating_point<Rep> {};
0031 
0032 template <class Rep> inline constexpr bool treat_as_floating_point_v
0033     = treat_as_floating_point<Rep>::value;                       // C++17
0034 
0035 template <class Rep>
0036 struct duration_values
0037 {
0038 public:
0039     static constexpr Rep zero(); // noexcept in C++20
0040     static constexpr Rep max();  // noexcept in C++20
0041     static constexpr Rep min();  // noexcept in C++20
0042 };
0043 
0044 // duration
0045 
0046 template <class Rep, class Period = ratio<1>>
0047 class duration
0048 {
0049     static_assert(!__is_duration<Rep>::value, "A duration representation can not be a duration");
0050     static_assert(__is_ratio<Period>::value, "Second template parameter of duration must be a std::ratio");
0051     static_assert(Period::num > 0, "duration period must be positive");
0052 public:
0053     typedef Rep rep;
0054     typedef typename _Period::type period;
0055 
0056     constexpr duration() = default;
0057     template <class Rep2>
0058         constexpr explicit duration(const Rep2& r,
0059             typename enable_if
0060             <
0061                is_convertible<const Rep2&, rep>::value &&
0062                (treat_as_floating_point<rep>::value ||
0063                !treat_as_floating_point<rep>::value && !treat_as_floating_point<Rep2>::value)
0064             >::type* = 0);
0065 
0066     // conversions
0067     template <class Rep2, class Period2>
0068         constexpr duration(const duration<Rep2, Period2>& d,
0069             typename enable_if
0070             <
0071                 treat_as_floating_point<rep>::value ||
0072                 ratio_divide<Period2, period>::type::den == 1
0073             >::type* = 0);
0074 
0075     // observer
0076 
0077     constexpr rep count() const;
0078 
0079     // arithmetic
0080 
0081     constexpr common_type<duration>::type  operator+() const;
0082     constexpr common_type<duration>::type  operator-() const;
0083     constexpr duration& operator++();    // constexpr in C++17
0084     constexpr duration  operator++(int); // constexpr in C++17
0085     constexpr duration& operator--();    // constexpr in C++17
0086     constexpr duration  operator--(int); // constexpr in C++17
0087 
0088     constexpr duration& operator+=(const duration& d);  // constexpr in C++17
0089     constexpr duration& operator-=(const duration& d);  // constexpr in C++17
0090 
0091     duration& operator*=(const rep& rhs);       // constexpr in C++17
0092     duration& operator/=(const rep& rhs);       // constexpr in C++17
0093     duration& operator%=(const rep& rhs);       // constexpr in C++17
0094     duration& operator%=(const duration& rhs);  // constexpr in C++17
0095 
0096     // special values
0097 
0098     static constexpr duration zero(); // noexcept in C++20
0099     static constexpr duration min();  // noexcept in C++20
0100     static constexpr duration max();  // noexcept in C++20
0101 };
0102 
0103 typedef duration<long long,         nano> nanoseconds;
0104 typedef duration<long long,        micro> microseconds;
0105 typedef duration<long long,        milli> milliseconds;
0106 typedef duration<long long              > seconds;
0107 typedef duration<     long, ratio<  60> > minutes;
0108 typedef duration<     long, ratio<3600> > hours;
0109 
0110 template <class Clock, class Duration = typename Clock::duration>
0111 class time_point
0112 {
0113 public:
0114     typedef Clock                     clock;
0115     typedef Duration                  duration;
0116     typedef typename duration::rep    rep;
0117     typedef typename duration::period period;
0118 private:
0119     duration d_;  // exposition only
0120 
0121 public:
0122     time_point();  // has value "epoch" // constexpr in C++14
0123     explicit time_point(const duration& d);  // same as time_point() + d // constexpr in C++14
0124 
0125     // conversions
0126     template <class Duration2>
0127        time_point(const time_point<clock, Duration2>& t); // constexpr in C++14
0128 
0129     // observer
0130 
0131     duration time_since_epoch() const; // constexpr in C++14
0132 
0133     // arithmetic
0134 
0135     time_point& operator+=(const duration& d); // constexpr in C++17
0136     time_point& operator-=(const duration& d); // constexpr in C++17
0137 
0138     // special values
0139 
0140     static constexpr time_point min();  // noexcept in C++20
0141     static constexpr time_point max();  // noexcept in C++20
0142 };
0143 
0144 } // chrono
0145 
0146 // common_type traits
0147 template <class Rep1, class Period1, class Rep2, class Period2>
0148   struct common_type<chrono::duration<Rep1, Period1>, chrono::duration<Rep2, Period2>>;
0149 
0150 template <class Clock, class Duration1, class Duration2>
0151   struct common_type<chrono::time_point<Clock, Duration1>, chrono::time_point<Clock, Duration2>>;
0152 
0153 namespace chrono {
0154 
0155 // duration arithmetic
0156 template <class Rep1, class Period1, class Rep2, class Period2>
0157   constexpr
0158   typename common_type<duration<Rep1, Period1>, duration<Rep2, Period2>>::type
0159   operator+(const duration<Rep1, Period1>& lhs, const duration<Rep2, Period2>& rhs);
0160 template <class Rep1, class Period1, class Rep2, class Period2>
0161   constexpr
0162   typename common_type<duration<Rep1, Period1>, duration<Rep2, Period2>>::type
0163   operator-(const duration<Rep1, Period1>& lhs, const duration<Rep2, Period2>& rhs);
0164 template <class Rep1, class Period, class Rep2>
0165   constexpr
0166   duration<typename common_type<Rep1, Rep2>::type, Period>
0167   operator*(const duration<Rep1, Period>& d, const Rep2& s);
0168 template <class Rep1, class Period, class Rep2>
0169   constexpr
0170   duration<typename common_type<Rep1, Rep2>::type, Period>
0171   operator*(const Rep1& s, const duration<Rep2, Period>& d);
0172 template <class Rep1, class Period, class Rep2>
0173   constexpr
0174   duration<typename common_type<Rep1, Rep2>::type, Period>
0175   operator/(const duration<Rep1, Period>& d, const Rep2& s);
0176 template <class Rep1, class Period1, class Rep2, class Period2>
0177   constexpr
0178   typename common_type<Rep1, Rep2>::type
0179   operator/(const duration<Rep1, Period1>& lhs, const duration<Rep2, Period2>& rhs);
0180 
0181 // duration comparisons
0182 template <class Rep1, class Period1, class Rep2, class Period2>
0183    constexpr
0184    bool operator==(const duration<Rep1, Period1>& lhs, const duration<Rep2, Period2>& rhs);
0185 template <class Rep1, class Period1, class Rep2, class Period2>
0186    constexpr
0187    bool operator!=(const duration<Rep1, Period1>& lhs, const duration<Rep2, Period2>& rhs); // removed in C++20
0188 template <class Rep1, class Period1, class Rep2, class Period2>
0189    constexpr
0190    bool operator< (const duration<Rep1, Period1>& lhs, const duration<Rep2, Period2>& rhs);
0191 template <class Rep1, class Period1, class Rep2, class Period2>
0192    constexpr
0193    bool operator<=(const duration<Rep1, Period1>& lhs, const duration<Rep2, Period2>& rhs);
0194 template <class Rep1, class Period1, class Rep2, class Period2>
0195    constexpr
0196    bool operator> (const duration<Rep1, Period1>& lhs, const duration<Rep2, Period2>& rhs);
0197 template <class Rep1, class Period1, class Rep2, class Period2>
0198    constexpr
0199    bool operator>=(const duration<Rep1, Period1>& lhs, const duration<Rep2, Period2>& rhs);
0200 template<class Rep1, class Period1, class Rep2, class Period2>
0201   requires three_way_comparable<typename CT::rep>
0202   constexpr auto operator<=>(const duration<Rep1, Period1>& lhs,
0203                              const duration<Rep2, Period2>& rhs);                           // since C++20
0204 
0205 // duration_cast
0206 template <class ToDuration, class Rep, class Period>
0207   ToDuration duration_cast(const duration<Rep, Period>& d);
0208 
0209 template <class ToDuration, class Rep, class Period>
0210     constexpr ToDuration floor(const duration<Rep, Period>& d);    // C++17
0211 template <class ToDuration, class Rep, class Period>
0212     constexpr ToDuration ceil(const duration<Rep, Period>& d);     // C++17
0213 template <class ToDuration, class Rep, class Period>
0214     constexpr ToDuration round(const duration<Rep, Period>& d);    // C++17
0215 
0216 // duration I/O
0217 template<class charT, class traits, class Rep, class Period>       // C++20
0218   basic_ostream<charT, traits>&
0219     operator<<(basic_ostream<charT, traits>& os,
0220                const duration<Rep, Period>& d);
0221 
0222 // time_point arithmetic (all constexpr in C++14)
0223 template <class Clock, class Duration1, class Rep2, class Period2>
0224   time_point<Clock, typename common_type<Duration1, duration<Rep2, Period2>>::type>
0225   operator+(const time_point<Clock, Duration1>& lhs, const duration<Rep2, Period2>& rhs);
0226 template <class Rep1, class Period1, class Clock, class Duration2>
0227   time_point<Clock, typename common_type<duration<Rep1, Period1>, Duration2>::type>
0228   operator+(const duration<Rep1, Period1>& lhs, const time_point<Clock, Duration2>& rhs);
0229 template <class Clock, class Duration1, class Rep2, class Period2>
0230   time_point<Clock, typename common_type<Duration1, duration<Rep2, Period2>>::type>
0231   operator-(const time_point<Clock, Duration1>& lhs, const duration<Rep2, Period2>& rhs);
0232 template <class Clock, class Duration1, class Duration2>
0233   typename common_type<Duration1, Duration2>::type
0234   operator-(const time_point<Clock, Duration1>& lhs, const time_point<Clock, Duration2>& rhs);
0235 
0236 // time_point comparisons (all constexpr in C++14)
0237 template <class Clock, class Duration1, class Duration2>
0238    bool operator==(const time_point<Clock, Duration1>& lhs, const time_point<Clock, Duration2>& rhs);
0239 template <class Clock, class Duration1, class Duration2>
0240    bool operator!=(const time_point<Clock, Duration1>& lhs, const time_point<Clock, Duration2>& rhs); // removed in C++20
0241 template <class Clock, class Duration1, class Duration2>
0242    bool operator< (const time_point<Clock, Duration1>& lhs, const time_point<Clock, Duration2>& rhs);
0243 template <class Clock, class Duration1, class Duration2>
0244    bool operator<=(const time_point<Clock, Duration1>& lhs, const time_point<Clock, Duration2>& rhs);
0245 template <class Clock, class Duration1, class Duration2>
0246    bool operator> (const time_point<Clock, Duration1>& lhs, const time_point<Clock, Duration2>& rhs);
0247 template <class Clock, class Duration1, class Duration2>
0248    bool operator>=(const time_point<Clock, Duration1>& lhs, const time_point<Clock, Duration2>& rhs);
0249 template<class Clock, class Duration1,
0250          three_way_comparable_with<Duration1> Duration2>
0251   constexpr auto operator<=>(const time_point<Clock, Duration1>& lhs,
0252                              const time_point<Clock, Duration2>& rhs);                                // since C++20
0253 
0254 // time_point_cast (constexpr in C++14)
0255 
0256 template <class ToDuration, class Clock, class Duration>
0257   time_point<Clock, ToDuration> time_point_cast(const time_point<Clock, Duration>& t);
0258 
0259 template <class ToDuration, class Clock, class Duration>
0260     constexpr time_point<Clock, ToDuration>
0261     floor(const time_point<Clock, Duration>& tp);                  // C++17
0262 
0263 template <class ToDuration, class Clock, class Duration>
0264     constexpr time_point<Clock, ToDuration>
0265     ceil(const time_point<Clock, Duration>& tp);                   // C++17
0266 
0267 template <class ToDuration, class Clock, class Duration>
0268     constexpr time_point<Clock, ToDuration>
0269     round(const time_point<Clock, Duration>& tp);                  // C++17
0270 
0271 template <class Rep, class Period>
0272     constexpr duration<Rep, Period> abs(duration<Rep, Period> d);  // C++17
0273 
0274 // Clocks
0275 
0276 class system_clock
0277 {
0278 public:
0279     typedef microseconds                     duration;
0280     typedef duration::rep                    rep;
0281     typedef duration::period                 period;
0282     typedef chrono::time_point<system_clock> time_point;
0283     static const bool is_steady =            false; // constexpr in C++14
0284 
0285     static time_point now() noexcept;
0286     static time_t     to_time_t  (const time_point& __t) noexcept;
0287     static time_point from_time_t(time_t __t) noexcept;
0288 };
0289 
0290 template <class Duration>
0291   using sys_time  = time_point<system_clock, Duration>; // C++20
0292 using sys_seconds = sys_time<seconds>;                  // C++20
0293 using sys_days    = sys_time<days>;                     // C++20
0294 
0295 template<class charT, class traits, class Duration>     // C++20
0296   basic_ostream<charT, traits>&
0297     operator<<(basic_ostream<charT, traits>& os, const sys_time<Duration>& tp);
0298 
0299 template<class charT, class traits>                    // C++20
0300   basic_ostream<charT, traits>&
0301     operator<<(basic_ostream<charT, traits>& os, const sys_days& dp);
0302 
0303 // [time.clock.utc], class utc_clock
0304 class utc_clock {                                      // C++20
0305 public:
0306     using rep                       = a signed arithmetic type;
0307     using period                    = ratio<unspecified, unspecified>;
0308     using duration                  = chrono::duration<rep, period>;
0309     using time_point                = chrono::time_point<utc_clock>;
0310     static constexpr bool is_steady = unspecified;
0311 
0312     static time_point now();
0313 
0314     template<class Duration>
0315       static sys_time<common_type_t<Duration, seconds>>
0316         to_sys(const utc_time<Duration>& t);
0317     template<class Duration>
0318       static utc_time<common_type_t<Duration, seconds>>
0319         from_sys(const sys_time<Duration>& t);
0320 };
0321 
0322 template<class Duration>
0323 using utc_time  = time_point<utc_clock, Duration>;      // C++20
0324 using utc_seconds = utc_time<seconds>;                  // C++20
0325 
0326 template<class charT, class traits, class Duration>     // C++20
0327   basic_ostream<charT, traits>&
0328     operator<<(basic_ostream<charT, traits>& os, const utc_time<Duration>& t);
0329 
0330 struct leap_second_info {                               // C++20
0331   bool    is_leap_second;
0332   seconds elapsed;
0333 };
0334 
0335 template<class Duration>                                // C++20
0336   leap_second_info get_leap_second_info(const utc_time<Duration>& ut);
0337 
0338 class file_clock                                        // C++20
0339 {
0340 public:
0341     typedef see-below                      rep;
0342     typedef nano                           period;
0343     typedef chrono::duration<rep, period>  duration;
0344     typedef chrono::time_point<file_clock> time_point;
0345     static constexpr bool is_steady =      false;
0346 
0347     static time_point now() noexcept;
0348 
0349     template<class Duration>
0350     static sys_time<see-below> to_sys(const file_time<Duration>&);
0351 
0352     template<class Duration>
0353     static file_time<see-below> from_sys(const sys_time<Duration>&);
0354 };
0355 
0356 template<class Duration>
0357   using file_time = time_point<file_clock, Duration>;   // C++20
0358 
0359 template<class charT, class traits, class Duration>     // C++20
0360   basic_ostream<charT, traits>&
0361     operator<<(basic_ostream<charT, traits>& os, const file_time<Duration>& tp);
0362 
0363 class steady_clock
0364 {
0365 public:
0366     typedef nanoseconds                                   duration;
0367     typedef duration::rep                                 rep;
0368     typedef duration::period                              period;
0369     typedef chrono::time_point<steady_clock, duration>    time_point;
0370     static const bool is_steady =                         true; // constexpr in C++14
0371 
0372     static time_point now() noexcept;
0373 };
0374 
0375 typedef steady_clock high_resolution_clock;
0376 
0377 // 25.7.8, local time           // C++20
0378 struct local_t {};
0379 template<class Duration>
0380   using local_time  = time_point<local_t, Duration>;
0381 using local_seconds = local_time<seconds>;
0382 using local_days    = local_time<days>;
0383 
0384 template<class charT, class traits, class Duration>     // C++20
0385   basic_ostream<charT, traits>&
0386     operator<<(basic_ostream<charT, traits>& os, const local_time<Duration>& tp);
0387 
0388 // 25.8.2, class last_spec    // C++20
0389 struct last_spec;
0390 
0391 // 25.8.3, class day          // C++20
0392 
0393 class day;
0394 constexpr bool operator==(const day& x, const day& y) noexcept;
0395 constexpr strong_ordering operator<=>(const day& x, const day& y) noexcept;
0396 constexpr day  operator+(const day&  x, const days& y) noexcept;
0397 constexpr day  operator+(const days& x, const day&  y) noexcept;
0398 constexpr day  operator-(const day&  x, const days& y) noexcept;
0399 constexpr days operator-(const day&  x, const day&  y) noexcept;
0400 template<class charT, class traits>
0401   basic_ostream<charT, traits>&
0402     operator<<(basic_ostream<charT, traits>& os, const day& d);
0403 
0404 // 25.8.4, class month    // C++20
0405 class month;
0406 constexpr bool operator==(const month& x, const month& y) noexcept;
0407 constexpr strong_ordering operator<=>(const month& x, const month& y) noexcept;
0408 
0409 constexpr month  operator+(const month&  x, const months& y) noexcept;
0410 constexpr month  operator+(const months& x,  const month& y) noexcept;
0411 constexpr month  operator-(const month&  x, const months& y) noexcept;
0412 constexpr months operator-(const month&  x,  const month& y) noexcept;
0413 template<class charT, class traits>
0414   basic_ostream<charT, traits>&
0415     operator<<(basic_ostream<charT, traits>& os, const month& m);
0416 
0417 // 25.8.5, class year    // C++20
0418 class year;
0419 constexpr bool operator==(const year& x, const year& y) noexcept;
0420 constexpr strong_ordering operator<=>(const year& x, const year& y) noexcept;
0421 
0422 constexpr year  operator+(const year&  x, const years& y) noexcept;
0423 constexpr year  operator+(const years& x, const year&  y) noexcept;
0424 constexpr year  operator-(const year&  x, const years& y) noexcept;
0425 constexpr years operator-(const year&  x, const year&  y) noexcept;
0426 template<class charT, class traits>
0427   basic_ostream<charT, traits>&
0428     operator<<(basic_ostream<charT, traits>& os, const year& y);
0429 
0430 // 25.8.6, class weekday    // C++20
0431 class weekday;
0432 
0433 constexpr bool operator==(const weekday& x, const weekday& y) noexcept;
0434 constexpr weekday operator+(const weekday& x, const days&    y) noexcept;
0435 constexpr weekday operator+(const days&    x, const weekday& y) noexcept;
0436 constexpr weekday operator-(const weekday& x, const days&    y) noexcept;
0437 constexpr days    operator-(const weekday& x, const weekday& y) noexcept;
0438 template<class charT, class traits>
0439   basic_ostream<charT, traits>&
0440     operator<<(basic_ostream<charT, traits>& os, const weekday& wd);
0441 
0442 // 25.8.7, class weekday_indexed    // C++20
0443 
0444 class weekday_indexed;
0445 constexpr bool operator==(const weekday_indexed& x, const weekday_indexed& y) noexcept;
0446 
0447 template<class charT, class traits>
0448   basic_ostream<charT, traits>&
0449     operator<<(basic_ostream<charT, traits>& os, const weekday_indexed& wdi);
0450 
0451 // 25.8.8, class weekday_last    // C++20
0452 class weekday_last;
0453 
0454 constexpr bool operator==(const weekday_last& x, const weekday_last& y) noexcept;
0455 
0456 template<class charT, class traits>
0457   basic_ostream<charT, traits>&
0458     operator<<(basic_ostream<charT, traits>& os, const weekday_last& wdl);
0459 
0460 // 25.8.9, class month_day    // C++20
0461 class month_day;
0462 
0463 constexpr bool operator==(const month_day& x, const month_day& y) noexcept;
0464 constexpr strong_ordering operator<=>(const month_day& x, const month_day& y) noexcept;
0465 
0466 template<class charT, class traits>
0467   basic_ostream<charT, traits>&
0468     operator<<(basic_ostream<charT, traits>& os, const month_day& md);
0469 
0470 // 25.8.10, class month_day_last    // C++20
0471 class month_day_last;
0472 
0473 constexpr bool operator==(const month_day_last& x, const month_day_last& y) noexcept;
0474 constexpr strong_ordering operator<=>(const month_day_last& x, const month_day_last& y) noexcept;
0475 
0476 template<class charT, class traits>
0477   basic_ostream<charT, traits>&
0478     operator<<(basic_ostream<charT, traits>& os, const month_day_last& mdl);
0479 
0480 // 25.8.11, class month_weekday    // C++20
0481 class month_weekday;
0482 
0483 constexpr bool operator==(const month_weekday& x, const month_weekday& y) noexcept;
0484 
0485 template<class charT, class traits>
0486   basic_ostream<charT, traits>&
0487     operator<<(basic_ostream<charT, traits>& os, const month_weekday& mwd);
0488 
0489 // 25.8.12, class month_weekday_last    // C++20
0490 class month_weekday_last;
0491 
0492 constexpr bool operator==(const month_weekday_last& x, const month_weekday_last& y) noexcept;
0493 
0494 template<class charT, class traits>
0495   basic_ostream<charT, traits>&
0496     operator<<(basic_ostream<charT, traits>& os, const month_weekday_last& mwdl);
0497 
0498 
0499 // 25.8.13, class year_month    // C++20
0500 class year_month;
0501 
0502 constexpr bool operator==(const year_month& x, const year_month& y) noexcept;
0503 constexpr strong_ordering operator<=>(const year_month& x, const year_month& y) noexcept;
0504 
0505 constexpr year_month operator+(const year_month& ym, const months& dm) noexcept;
0506 constexpr year_month operator+(const months& dm, const year_month& ym) noexcept;
0507 constexpr year_month operator-(const year_month& ym, const months& dm) noexcept;
0508 constexpr months operator-(const year_month& x, const year_month& y) noexcept;
0509 constexpr year_month operator+(const year_month& ym, const years& dy) noexcept;
0510 constexpr year_month operator+(const years& dy, const year_month& ym) noexcept;
0511 constexpr year_month operator-(const year_month& ym, const years& dy) noexcept;
0512 
0513 template<class charT, class traits>
0514   basic_ostream<charT, traits>&
0515     operator<<(basic_ostream<charT, traits>& os, const year_month& ym);
0516 
0517 // 25.8.14, class year_month_day class    // C++20
0518 year_month_day;
0519 
0520 constexpr bool operator==(const year_month_day& x, const year_month_day& y) noexcept;
0521 constexpr strong_ordering operator<=>(const year_month_day& x, const year_month_day& y) noexcept;
0522 
0523 constexpr year_month_day operator+(const year_month_day& ymd, const months& dm) noexcept;
0524 constexpr year_month_day operator+(const months& dm, const year_month_day& ymd) noexcept;
0525 constexpr year_month_day operator+(const year_month_day& ymd, const years& dy) noexcept;
0526 constexpr year_month_day operator+(const years& dy, const year_month_day& ymd) noexcept;
0527 constexpr year_month_day operator-(const year_month_day& ymd, const months& dm) noexcept;
0528 constexpr year_month_day operator-(const year_month_day& ymd, const years& dy) noexcept;
0529 
0530 template<class charT, class traits>
0531   basic_ostream<charT, traits>&
0532     operator<<(basic_ostream<charT, traits>& os, const year_month_day& ymd);
0533 
0534 // 25.8.15, class year_month_day_last    // C++20
0535 class year_month_day_last;
0536 
0537 constexpr bool operator==(const year_month_day_last& x, const year_month_day_last& y) noexcept;
0538 constexpr strong_ordering operator<=>(const year_month_day_last_day& x, const year_month_day_last_day& y) noexcept;
0539 
0540 constexpr year_month_day_last
0541   operator+(const year_month_day_last& ymdl, const months& dm) noexcept;
0542 constexpr year_month_day_last
0543   operator+(const months& dm, const year_month_day_last& ymdl) noexcept;
0544 constexpr year_month_day_last
0545   operator+(const year_month_day_last& ymdl, const years& dy) noexcept;
0546 constexpr year_month_day_last
0547   operator+(const years& dy, const year_month_day_last& ymdl) noexcept;
0548 constexpr year_month_day_last
0549   operator-(const year_month_day_last& ymdl, const months& dm) noexcept;
0550 constexpr year_month_day_last
0551   operator-(const year_month_day_last& ymdl, const years& dy) noexcept;
0552 
0553 template<class charT, class traits>
0554   basic_ostream<charT, traits>&
0555     operator<<(basic_ostream<charT, traits>& os, const year_month_day_last& ymdl);
0556 
0557 // 25.8.16, class year_month_weekday    // C++20
0558 class year_month_weekday;
0559 
0560 constexpr bool operator==(const year_month_weekday& x,
0561                           const year_month_weekday& y) noexcept;
0562 
0563 constexpr year_month_weekday
0564   operator+(const year_month_weekday& ymwd, const months& dm) noexcept;
0565 constexpr year_month_weekday
0566   operator+(const months& dm, const year_month_weekday& ymwd) noexcept;
0567 constexpr year_month_weekday
0568   operator+(const year_month_weekday& ymwd, const years& dy) noexcept;
0569 constexpr year_month_weekday
0570   operator+(const years& dy, const year_month_weekday& ymwd) noexcept;
0571 constexpr year_month_weekday
0572   operator-(const year_month_weekday& ymwd, const months& dm) noexcept;
0573 constexpr year_month_weekday
0574   operator-(const year_month_weekday& ymwd, const years& dy) noexcept;
0575 
0576 template<class charT, class traits>
0577   basic_ostream<charT, traits>&
0578     operator<<(basic_ostream<charT, traits>& os, const year_month_weekday& ymwd);
0579 
0580 // 25.8.17, class year_month_weekday_last    // C++20
0581 class year_month_weekday_last;
0582 
0583 constexpr bool operator==(const year_month_weekday_last& x,
0584                           const year_month_weekday_last& y) noexcept;
0585 constexpr year_month_weekday_last
0586   operator+(const year_month_weekday_last& ymwdl, const months& dm) noexcept;
0587 constexpr year_month_weekday_last
0588   operator+(const months& dm, const year_month_weekday_last& ymwdl) noexcept;
0589 constexpr year_month_weekday_last
0590   operator+(const year_month_weekday_last& ymwdl, const years& dy) noexcept;
0591 constexpr year_month_weekday_last
0592   operator+(const years& dy, const year_month_weekday_last& ymwdl) noexcept;
0593 constexpr year_month_weekday_last
0594   operator-(const year_month_weekday_last& ymwdl, const months& dm) noexcept;
0595 constexpr year_month_weekday_last
0596   operator-(const year_month_weekday_last& ymwdl, const years& dy) noexcept;
0597 
0598 template<class charT, class traits>
0599   basic_ostream<charT, traits>&
0600     operator<<(basic_ostream<charT, traits>& os, const year_month_weekday_last& ymwdl);
0601 
0602 // 25.8.18, civil calendar conventional syntax operators    // C++20
0603 constexpr year_month
0604   operator/(const year& y, const month& m) noexcept;
0605 constexpr year_month
0606   operator/(const year& y, int m) noexcept;
0607 constexpr month_day
0608   operator/(const month& m, const day& d) noexcept;
0609 constexpr month_day
0610   operator/(const month& m, int d) noexcept;
0611 constexpr month_day
0612   operator/(int m, const day& d) noexcept;
0613 constexpr month_day
0614   operator/(const day& d, const month& m) noexcept;
0615 constexpr month_day
0616   operator/(const day& d, int m) noexcept;
0617 constexpr month_day_last
0618   operator/(const month& m, last_spec) noexcept;
0619 constexpr month_day_last
0620   operator/(int m, last_spec) noexcept;
0621 constexpr month_day_last
0622   operator/(last_spec, const month& m) noexcept;
0623 constexpr month_day_last
0624   operator/(last_spec, int m) noexcept;
0625 constexpr month_weekday
0626   operator/(const month& m, const weekday_indexed& wdi) noexcept;
0627 constexpr month_weekday
0628   operator/(int m, const weekday_indexed& wdi) noexcept;
0629 constexpr month_weekday
0630   operator/(const weekday_indexed& wdi, const month& m) noexcept;
0631 constexpr month_weekday
0632   operator/(const weekday_indexed& wdi, int m) noexcept;
0633 constexpr month_weekday_last
0634   operator/(const month& m, const weekday_last& wdl) noexcept;
0635 constexpr month_weekday_last
0636   operator/(int m, const weekday_last& wdl) noexcept;
0637 constexpr month_weekday_last
0638   operator/(const weekday_last& wdl, const month& m) noexcept;
0639 constexpr month_weekday_last
0640   operator/(const weekday_last& wdl, int m) noexcept;
0641 constexpr year_month_day
0642   operator/(const year_month& ym, const day& d) noexcept;
0643 constexpr year_month_day
0644   operator/(const year_month& ym, int d) noexcept;
0645 constexpr year_month_day
0646   operator/(const year& y, const month_day& md) noexcept;
0647 constexpr year_month_day
0648   operator/(int y, const month_day& md) noexcept;
0649 constexpr year_month_day
0650   operator/(const month_day& md, const year& y) noexcept;
0651 constexpr year_month_day
0652   operator/(const month_day& md, int y) noexcept;
0653 constexpr year_month_day_last
0654   operator/(const year_month& ym, last_spec) noexcept;
0655 constexpr year_month_day_last
0656   operator/(const year& y, const month_day_last& mdl) noexcept;
0657 constexpr year_month_day_last
0658   operator/(int y, const month_day_last& mdl) noexcept;
0659 constexpr year_month_day_last
0660   operator/(const month_day_last& mdl, const year& y) noexcept;
0661 constexpr year_month_day_last
0662   operator/(const month_day_last& mdl, int y) noexcept;
0663 constexpr year_month_weekday
0664   operator/(const year_month& ym, const weekday_indexed& wdi) noexcept;
0665 constexpr year_month_weekday
0666   operator/(const year& y, const month_weekday& mwd) noexcept;
0667 constexpr year_month_weekday
0668   operator/(int y, const month_weekday& mwd) noexcept;
0669 constexpr year_month_weekday
0670   operator/(const month_weekday& mwd, const year& y) noexcept;
0671 constexpr year_month_weekday
0672   operator/(const month_weekday& mwd, int y) noexcept;
0673 constexpr year_month_weekday_last
0674   operator/(const year_month& ym, const weekday_last& wdl) noexcept;
0675 constexpr year_month_weekday_last
0676   operator/(const year& y, const month_weekday_last& mwdl) noexcept;
0677 constexpr year_month_weekday_last
0678   operator/(int y, const month_weekday_last& mwdl) noexcept;
0679 constexpr year_month_weekday_last
0680   operator/(const month_weekday_last& mwdl, const year& y) noexcept;
0681 constexpr year_month_weekday_last
0682   operator/(const month_weekday_last& mwdl, int y) noexcept;
0683 
0684 // 26.9, class template hh_mm_ss
0685 template <class Duration>
0686 class hh_mm_ss
0687 {
0688     bool            is_neg; // exposition only
0689     chrono::hours   h;      // exposition only
0690     chrono::minutes m;      // exposition only
0691     chrono::seconds s;      // exposition only
0692     precision       ss;     // exposition only
0693 
0694 public:
0695     static unsigned constexpr fractional_width = see below;
0696     using precision                            = see below;
0697 
0698     constexpr hh_mm_ss() noexcept : hh_mm_ss{Duration::zero()} {}
0699     constexpr explicit hh_mm_ss(Duration d) noexcept;
0700 
0701     constexpr bool is_negative() const noexcept;
0702     constexpr chrono::hours hours() const noexcept;
0703     constexpr chrono::minutes minutes() const noexcept;
0704     constexpr chrono::seconds seconds() const noexcept;
0705     constexpr precision subseconds() const noexcept;
0706 
0707     constexpr explicit operator  precision()   const noexcept;
0708     constexpr          precision to_duration() const noexcept;
0709 };
0710 
0711 template<class charT, class traits, class Duration>
0712   basic_ostream<charT, traits>&
0713     operator<<(basic_ostream<charT, traits>& os, const hh_mm_ss<Duration>& hms); // C++20
0714 
0715 // 26.10, 12/24 hour functions
0716 constexpr bool is_am(hours const& h) noexcept;
0717 constexpr bool is_pm(hours const& h) noexcept;
0718 constexpr hours make12(const hours& h) noexcept;
0719 constexpr hours make24(const hours& h, bool is_pm) noexcept;
0720 
0721 // [time.zone.db], time zone database
0722 struct tzdb {                                                                    // C++20
0723   string                 version;
0724   vector<time_zone>      zones;
0725   vector<time_zone_link> links;
0726   vector<leap_second>    leap_seconds;
0727 
0728   const time_zone* locate_zone(string_view tz_name) const;
0729   const time_zone* current_zone() const;
0730 };
0731 
0732 class tzdb_list {                                                                // C++20
0733 public:
0734   tzdb_list(const tzdb_list&) = delete;
0735   tzdb_list& operator=(const tzdb_list&) = delete;
0736 
0737   // unspecified additional constructors
0738 
0739   class const_iterator;
0740 
0741   const tzdb& front() const noexcept;
0742 
0743   const_iterator erase_after(const_iterator p);
0744 
0745   const_iterator begin() const noexcept;
0746   const_iterator end()   const noexcept;
0747 
0748   const_iterator cbegin() const noexcept;
0749   const_iterator cend()   const noexcept;
0750 };
0751 
0752 // [time.zone.db.access], time zone database access
0753 const tzdb& get_tzdb();                                                          // C++20
0754 tzdb_list& get_tzdb_list();                                                      // C++20
0755 const time_zone* locate_zone(string_view tz_name);                               // C++20
0756 const time_zone* current_zone()                                                  // C++20
0757 
0758 // [time.zone.db.remote], remote time zone database support
0759 const tzdb& reload_tzdb();                                                       // C++20
0760 string remote_version();                                                         // C++20
0761 
0762 // [time.zone.exception], exception classes
0763 class nonexistent_local_time;                                                    // C++20
0764 class ambiguous_local_time;                                                      // C++20
0765 
0766 // [time.zone.info], information classes
0767 struct sys_info {                                                                // C++20
0768   sys_seconds   begin;
0769   sys_seconds   end;
0770   seconds       offset;
0771   minutes       save;
0772   string        abbrev;
0773 };
0774 
0775 template<class charT, class traits>                                              // C++20
0776   basic_ostream<charT, traits>&
0777     operator<<(basic_ostream<charT, traits>& os, const sys_info& si);
0778 
0779 struct local_info {                                                             // C++20
0780   static constexpr int unique      = 0;
0781   static constexpr int nonexistent = 1;
0782   static constexpr int ambiguous   = 2;
0783 
0784   int result;
0785   sys_info first;
0786   sys_info second;
0787 };
0788 
0789 template<class charT, class traits>                                              // C++20
0790   basic_ostream<charT, traits>&
0791     operator<<(basic_ostream<charT, traits>& os, const local_info& li);
0792 
0793 // 25.10.5, class time_zone                                                      // C++20
0794 enum class choose {earliest, latest};
0795 class time_zone {
0796   time_zone(time_zone&&) = default;
0797   time_zone& operator=(time_zone&&) = default;
0798 
0799   // unspecified additional constructors
0800 
0801   string_view name() const noexcept;
0802 
0803   template<class Duration>
0804   sys_info get_info(const sys_time<Duration>& st) const;
0805 
0806   template<class Duration>
0807   local_info get_info(const local_time<Duration>& tp) const;
0808 
0809   template<class Duration>
0810   sys_time<common_type_t<Duration, seconds>>
0811     to_sys(const local_time<Duration>& tp) const;
0812 
0813   template<class Duration>
0814   sys_time<common_type_t<Duration, seconds>>
0815     to_sys(const local_time<Duration>& tp, choose z) const;
0816 
0817   template<class Duration>
0818   local_time<common_type_t<Duration, seconds>>
0819     to_local(const sys_time<Duration>& tp) const;
0820 };
0821 bool operator==(const time_zone& x, const time_zone& y) noexcept;                // C++20
0822 strong_ordering operator<=>(const time_zone& x, const time_zone& y) noexcept;    // C++20
0823 
0824 // [time.zone.zonedtraits], class template zoned_traits
0825 template<class T> struct zoned_traits;                                           // C++20
0826 
0827 // [time.zone.zonedtime], class template zoned_time
0828 template<class Duration, class TimeZonePtr = const time_zone*>                   // C++20
0829 class zoned_time;
0830 
0831 using zoned_seconds = zoned_time<seconds>;                                       // C++20
0832 
0833 template<class Duration1, class Duration2, class TimeZonePtr>                    // C++20
0834   bool operator==(const zoned_time<Duration1, TimeZonePtr>& x,
0835                   const zoned_time<Duration2, TimeZonePtr>& y);
0836 
0837 template<class charT, class traits, class Duration, class TimeZonePtr>           // C++20
0838   basic_ostream<charT, traits>&
0839     operator<<(basic_ostream<charT, traits>& os,
0840                const zoned_time<Duration, TimeZonePtr>& t);
0841 
0842 // [time.zone.leap], leap second support
0843 class leap_second {                                                              // C++20
0844 public:
0845   leap_second(const leap_second&)            = default;
0846   leap_second& operator=(const leap_second&) = default;
0847 
0848   // unspecified additional constructors
0849 
0850   constexpr sys_seconds date() const noexcept;
0851   constexpr seconds value() const noexcept;
0852 };
0853 
0854 constexpr bool operator==(const leap_second& x, const leap_second& y);           // C++20
0855 constexpr strong_ordering operator<=>(const leap_second& x, const leap_second& y);
0856 
0857 template<class Duration>                                                         // C++20
0858   constexpr bool operator==(const leap_second& x, const sys_time<Duration>& y);
0859 template<class Duration>                                                         // C++20
0860   constexpr bool operator< (const leap_second& x, const sys_time<Duration>& y);
0861 template<class Duration>                                                         // C++20
0862   constexpr bool operator< (const sys_time<Duration>& x, const leap_second& y);
0863 template<class Duration>                                                         // C++20
0864   constexpr bool operator> (const leap_second& x, const sys_time<Duration>& y);
0865 template<class Duration>                                                         // C++20
0866   constexpr bool operator> (const sys_time<Duration>& x, const leap_second& y);
0867 template<class Duration>                                                         // C++20
0868   constexpr bool operator<=(const leap_second& x, const sys_time<Duration>& y);
0869 template<class Duration>                                                         // C++20
0870   constexpr bool operator<=(const sys_time<Duration>& x, const leap_second& y);
0871 template<class Duration>                                                         // C++20
0872   constexpr bool operator>=(const leap_second& x, const sys_time<Duration>& y);
0873 template<class Duration>                                                         // C++20
0874   constexpr bool operator>=(const sys_time<Duration>& x, const leap_second& y);
0875 template<class Duration>                                                         // C++20
0876   requires three_way_comparable_with<sys_seconds, sys_time<Duration>>
0877   constexpr auto operator<=>(const leap_second& x, const sys_time<Duration>& y);
0878 
0879 // [time.zone.link], class time_zone_link
0880 class time_zone_link {                                                           // C++20
0881 public:
0882   time_zone_link(time_zone_link&&)            = default;
0883   time_zone_link& operator=(time_zone_link&&) = default;
0884 
0885   // unspecified additional constructors
0886 
0887   string_view name()   const noexcept;
0888   string_view target() const noexcept;
0889 };
0890 
0891 bool operator==(const time_zone_link& x, const time_zone_link& y);               // C++20
0892 strong_ordering operator<=>(const time_zone_link& x, const time_zone_link& y);   // C++20
0893 
0894 }  // chrono
0895 
0896 namespace std {
0897   template<class Duration, class charT>
0898     struct formatter<chrono::sys_time<Duration>, charT>;                          // C++20
0899   template<class Duration, class charT>
0900     struct formatter<chrono::utc_time<Duration>, charT>;                          // C++20
0901   template<class Duration, class charT>
0902     struct formatter<chrono::filetime<Duration>, charT>;                          // C++20
0903   template<class Duration, class charT>
0904     struct formatter<chrono::local_time<Duration>, charT>;                        // C++20
0905   template<class Rep, class Period, class charT>
0906     struct formatter<chrono::duration<Rep, Period>, charT>;                       // C++20
0907   template<class charT> struct formatter<chrono::day, charT>;                     // C++20
0908   template<class charT> struct formatter<chrono::month, charT>;                   // C++20
0909   template<class charT> struct formatter<chrono::year, charT>;                    // C++20
0910   template<class charT> struct formatter<chrono::weekday, charT>;                 // C++20
0911   template<class charT> struct formatter<chrono::weekday_indexed, charT>;         // C++20
0912   template<class charT> struct formatter<chrono::weekday_last, charT>;            // C++20
0913   template<class charT> struct formatter<chrono::month_day, charT>;               // C++20
0914   template<class charT> struct formatter<chrono::month_day_last, charT>;          // C++20
0915   template<class charT> struct formatter<chrono::month_weekday, charT>;           // C++20
0916   template<class charT> struct formatter<chrono::month_weekday_last, charT>;      // C++20
0917   template<class charT> struct formatter<chrono::year_month, charT>;              // C++20
0918   template<class charT> struct formatter<chrono::year_month_day, charT>;          // C++20
0919   template<class charT> struct formatter<chrono::year_month_day_last, charT>;     // C++20
0920   template<class charT> struct formatter<chrono::year_month_weekday, charT>;      // C++20
0921   template<class charT> struct formatter<chrono::year_month_weekday_last, charT>; // C++20
0922   template<class Rep, class Period, class charT>
0923     struct formatter<chrono::hh_mm_ss<duration<Rep, Period>>, charT>;             // C++20
0924   template<class charT> struct formatter<chrono::sys_info, charT>;                // C++20
0925   template<class charT> struct formatter<chrono::local_info, charT>;              // C++20
0926   template<class Duration, class TimeZonePtr, class charT>                        // C++20
0927     struct formatter<chrono::zoned_time<Duration, TimeZonePtr>, charT>;
0928 } // namespace std
0929 
0930 namespace chrono {
0931 // calendrical constants
0932 inline constexpr last_spec                              last{};       // C++20
0933 inline constexpr chrono::weekday                        Sunday{0};    // C++20
0934 inline constexpr chrono::weekday                        Monday{1};    // C++20
0935 inline constexpr chrono::weekday                        Tuesday{2};   // C++20
0936 inline constexpr chrono::weekday                        Wednesday{3}; // C++20
0937 inline constexpr chrono::weekday                        Thursday{4};  // C++20
0938 inline constexpr chrono::weekday                        Friday{5};    // C++20
0939 inline constexpr chrono::weekday                        Saturday{6};  // C++20
0940 
0941 inline constexpr chrono::month                          January{1};   // C++20
0942 inline constexpr chrono::month                          February{2};  // C++20
0943 inline constexpr chrono::month                          March{3};     // C++20
0944 inline constexpr chrono::month                          April{4};     // C++20
0945 inline constexpr chrono::month                          May{5};       // C++20
0946 inline constexpr chrono::month                          June{6};      // C++20
0947 inline constexpr chrono::month                          July{7};      // C++20
0948 inline constexpr chrono::month                          August{8};    // C++20
0949 inline constexpr chrono::month                          September{9}; // C++20
0950 inline constexpr chrono::month                          October{10};  // C++20
0951 inline constexpr chrono::month                          November{11}; // C++20
0952 inline constexpr chrono::month                          December{12}; // C++20
0953 }  // chrono
0954 
0955 inline namespace literals {
0956   inline namespace chrono_literals {
0957 constexpr chrono::hours                                 operator ""h(unsigned long long); // C++14
0958 constexpr chrono::duration<unspecified , ratio<3600,1>> operator ""h(long double); // C++14
0959 constexpr chrono::minutes                               operator ""min(unsigned long long); // C++14
0960 constexpr chrono::duration<unspecified , ratio<60,1>>   operator ""min(long double); // C++14
0961 constexpr chrono::seconds                               operator ""s(unsigned long long); // C++14
0962 constexpr chrono::duration<unspecified >                operator ""s(long double); // C++14
0963 constexpr chrono::milliseconds                          operator ""ms(unsigned long long); // C++14
0964 constexpr chrono::duration<unspecified , milli>         operator ""ms(long double); // C++14
0965 constexpr chrono::microseconds                          operator ""us(unsigned long long); // C++14
0966 constexpr chrono::duration<unspecified , micro>         operator ""us(long double); // C++14
0967 constexpr chrono::nanoseconds                           operator ""ns(unsigned long long); // C++14
0968 constexpr chrono::duration<unspecified , nano>          operator ""ns(long double); // C++14
0969 constexpr chrono::day                                   operator ""d(unsigned long long d) noexcept; // C++20
0970 constexpr chrono::year                                  operator ""y(unsigned long long y) noexcept; // C++20
0971 }  // chrono_literals
0972 }  // literals
0973 
0974 }  // std
0975 */
0976 
0977 // clang-format on
0978 
0979 #if __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
0980 #  include <__cxx03/chrono>
0981 #else
0982 #  include <__config>
0983 
0984 #  include <__chrono/duration.h>
0985 #  include <__chrono/file_clock.h>
0986 #  include <__chrono/high_resolution_clock.h>
0987 #  include <__chrono/steady_clock.h>
0988 #  include <__chrono/system_clock.h>
0989 #  include <__chrono/time_point.h>
0990 
0991 #  if _LIBCPP_STD_VER >= 20
0992 #    include <__chrono/calendar.h>
0993 #    include <__chrono/day.h>
0994 #    include <__chrono/exception.h>
0995 #    include <__chrono/hh_mm_ss.h>
0996 #    include <__chrono/literals.h>
0997 #    include <__chrono/local_info.h>
0998 #    include <__chrono/month.h>
0999 #    include <__chrono/month_weekday.h>
1000 #    include <__chrono/monthday.h>
1001 #    include <__chrono/sys_info.h>
1002 #    include <__chrono/weekday.h>
1003 #    include <__chrono/year.h>
1004 #    include <__chrono/year_month.h>
1005 #    include <__chrono/year_month_day.h>
1006 #    include <__chrono/year_month_weekday.h>
1007 
1008 #    if _LIBCPP_HAS_LOCALIZATION
1009 #      include <__chrono/formatter.h>
1010 #      include <__chrono/ostream.h>
1011 #      include <__chrono/parser_std_format_spec.h>
1012 #      include <__chrono/statically_widen.h>
1013 #    endif
1014 
1015 #    if _LIBCPP_HAS_TIME_ZONE_DATABASE && _LIBCPP_HAS_FILESYSTEM && _LIBCPP_HAS_LOCALIZATION
1016 #      include <__chrono/leap_second.h>
1017 #      include <__chrono/time_zone.h>
1018 #      include <__chrono/time_zone_link.h>
1019 #      include <__chrono/tzdb.h>
1020 #      include <__chrono/tzdb_list.h>
1021 #      include <__chrono/utc_clock.h>
1022 #      include <__chrono/zoned_time.h>
1023 #    endif
1024 
1025 #  endif
1026 
1027 #  include <version>
1028 
1029 // standard-mandated includes
1030 
1031 // [time.syn]
1032 #  include <compare>
1033 
1034 #  if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
1035 #    pragma GCC system_header
1036 #  endif
1037 
1038 #  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 17
1039 #    include <cstdint>
1040 #    include <stdexcept>
1041 #    include <string_view>
1042 #  endif
1043 
1044 #  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
1045 #    include <bit>
1046 #    include <concepts>
1047 #    include <cstring>
1048 #    include <forward_list>
1049 #    include <string>
1050 #    include <tuple>
1051 #    include <vector>
1052 #  endif
1053 
1054 #  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER == 20
1055 #    include <charconv>
1056 #    if _LIBCPP_HAS_LOCALIZATION
1057 #      include <locale>
1058 #      include <ostream>
1059 #    endif
1060 #  endif
1061 #endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
1062 
1063 #endif // _LIBCPP_CHRONO