File Coverage

/usr/include/c++/5/chrono
Criterion Covered Total %
statement 10 10 100.0
branch n/a
condition n/a
subroutine n/a
pod n/a
total 10 10 100.0


line stmt bran cond sub pod time code
1             // -*- C++ -*-
2              
3             // Copyright (C) 2008-2015 Free Software Foundation, Inc.
4             //
5             // This file is part of the GNU ISO C++ Library. This library is free
6             // software; you can redistribute it and/or modify it under the
7             // terms of the GNU General Public License as published by the
8             // Free Software Foundation; either version 3, or (at your option)
9             // any later version.
10              
11             // This library is distributed in the hope that it will be useful,
12             // but WITHOUT ANY WARRANTY; without even the implied warranty of
13             // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14             // GNU General Public License for more details.
15              
16             // Under Section 7 of GPL version 3, you are granted additional
17             // permissions described in the GCC Runtime Library Exception, version
18             // 3.1, as published by the Free Software Foundation.
19              
20             // You should have received a copy of the GNU General Public License and
21             // a copy of the GCC Runtime Library Exception along with this program;
22             // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
23             // .
24              
25             /** @file include/chrono
26             * This is a Standard C++ Library header.
27             */
28              
29             #ifndef _GLIBCXX_CHRONO
30             #define _GLIBCXX_CHRONO 1
31              
32             #pragma GCC system_header
33              
34             #if __cplusplus < 201103L
35             # include
36             #else
37              
38             #include
39             #include
40             #include
41             #include
42             #include // for literals support.
43              
44             #ifdef _GLIBCXX_USE_C99_STDINT_TR1
45              
46             namespace std _GLIBCXX_VISIBILITY(default)
47             {
48             /**
49             * @defgroup chrono Time
50             * @ingroup utilities
51             *
52             * Classes and functions for time.
53             * @{
54             */
55              
56             /** @namespace std::chrono
57             * @brief ISO C++ 2011 entities sub-namespace for time and date.
58             */
59             namespace chrono
60             {
61             _GLIBCXX_BEGIN_NAMESPACE_VERSION
62              
63             template>
64             struct duration;
65              
66             template
67             struct time_point;
68              
69             _GLIBCXX_END_NAMESPACE_VERSION
70             }
71              
72             _GLIBCXX_BEGIN_NAMESPACE_VERSION
73              
74             // 20.11.4.3 specialization of common_type (for duration, sfinae-friendly)
75            
76             template
77             struct __duration_common_type_wrapper
78             {
79             private:
80             typedef __static_gcd<_Period1::num, _Period2::num> __gcd_num;
81             typedef __static_gcd<_Period1::den, _Period2::den> __gcd_den;
82             typedef typename _CT::type __cr;
83             typedef ratio<__gcd_num::value,
84             (_Period1::den / __gcd_den::value) * _Period2::den> __r;
85             public:
86             typedef __success_type> type;
87             };
88              
89             template
90             struct __duration_common_type_wrapper<__failure_type, _Period1, _Period2>
91             { typedef __failure_type type; };
92              
93             template
94             struct common_type,
95             chrono::duration<_Rep2, _Period2>>
96             : public __duration_common_type_wrapper
97             common_type<_Rep1, _Rep2>>::type, _Period1, _Period2>::type
98             { };
99              
100             // 20.11.4.3 specialization of common_type (for time_point, sfinae-friendly)
101            
102             template
103             struct __timepoint_common_type_wrapper
104             {
105             typedef __success_type>
106             type;
107             };
108              
109             template
110             struct __timepoint_common_type_wrapper<__failure_type, _Clock>
111             { typedef __failure_type type; };
112              
113             template
114             struct common_type,
115             chrono::time_point<_Clock, _Duration2>>
116             : public __timepoint_common_type_wrapper
117             common_type<_Duration1, _Duration2>>::type, _Clock>::type
118             { };
119              
120             _GLIBCXX_END_NAMESPACE_VERSION
121              
122             namespace chrono
123             {
124             _GLIBCXX_BEGIN_NAMESPACE_VERSION
125              
126             // Primary template for duration_cast impl.
127             template
128             bool _NumIsOne = false, bool _DenIsOne = false>
129             struct __duration_cast_impl
130             {
131             template
132             static constexpr _ToDur
133             __cast(const duration<_Rep, _Period>& __d)
134             {
135             typedef typename _ToDur::rep __to_rep;
136             return _ToDur(static_cast<__to_rep>(static_cast<_CR>(__d.count())
137             * static_cast<_CR>(_CF::num)
138             / static_cast<_CR>(_CF::den)));
139             }
140             };
141              
142             template
143             struct __duration_cast_impl<_ToDur, _CF, _CR, true, true>
144             {
145             template
146             static constexpr _ToDur
147 107           __cast(const duration<_Rep, _Period>& __d)
148             {
149             typedef typename _ToDur::rep __to_rep;
150 107           return _ToDur(static_cast<__to_rep>(__d.count()));
151             }
152             };
153              
154             template
155             struct __duration_cast_impl<_ToDur, _CF, _CR, true, false>
156             {
157             template
158             static constexpr _ToDur
159             __cast(const duration<_Rep, _Period>& __d)
160             {
161             typedef typename _ToDur::rep __to_rep;
162             return _ToDur(static_cast<__to_rep>(
163             static_cast<_CR>(__d.count()) / static_cast<_CR>(_CF::den)));
164             }
165             };
166              
167             template
168             struct __duration_cast_impl<_ToDur, _CF, _CR, false, true>
169             {
170             template
171             static constexpr _ToDur
172             __cast(const duration<_Rep, _Period>& __d)
173             {
174             typedef typename _ToDur::rep __to_rep;
175             return _ToDur(static_cast<__to_rep>(
176             static_cast<_CR>(__d.count()) * static_cast<_CR>(_CF::num)));
177             }
178             };
179              
180             template
181             struct __is_duration
182             : std::false_type
183             { };
184              
185             template
186             struct __is_duration>
187             : std::true_type
188             { };
189              
190             /// duration_cast
191             template
192             constexpr typename enable_if<__is_duration<_ToDur>::value,
193             _ToDur>::type
194 107           duration_cast(const duration<_Rep, _Period>& __d)
195             {
196             typedef typename _ToDur::period __to_period;
197             typedef typename _ToDur::rep __to_rep;
198             typedef ratio_divide<_Period, __to_period> __cf;
199             typedef typename common_type<__to_rep, _Rep, intmax_t>::type
200             __cr;
201             typedef __duration_cast_impl<_ToDur, __cf, __cr,
202             __cf::num == 1, __cf::den == 1> __dc;
203 107           return __dc::__cast(__d);
204             }
205              
206             /// treat_as_floating_point
207             template
208             struct treat_as_floating_point
209             : is_floating_point<_Rep>
210             { };
211              
212             /// duration_values
213             template
214             struct duration_values
215             {
216             static constexpr _Rep
217             zero()
218             { return _Rep(0); }
219              
220             static constexpr _Rep
221             max()
222             { return numeric_limits<_Rep>::max(); }
223              
224             static constexpr _Rep
225             min()
226             { return numeric_limits<_Rep>::lowest(); }
227             };
228              
229             template
230             struct __is_ratio
231             : std::false_type
232             { };
233              
234             template
235             struct __is_ratio>
236             : std::true_type
237             { };
238              
239             /// duration
240             template
241             struct duration
242             {
243             typedef _Rep rep;
244             typedef _Period period;
245              
246             static_assert(!__is_duration<_Rep>::value, "rep cannot be a duration");
247             static_assert(__is_ratio<_Period>::value,
248             "period must be a specialization of ratio");
249             static_assert(_Period::num > 0, "period must be positive");
250              
251             // 20.11.5.1 construction / copy / destroy
252             constexpr duration() = default;
253              
254             // NB: Make constexpr implicit. This cannot be explicitly
255             // constexpr, as any UDT that is not a literal type with a
256             // constexpr copy constructor will be ill-formed.
257             duration(const duration&) = default;
258              
259             template
260             enable_if::value
261             && (treat_as_floating_point::value
262             || !treat_as_floating_point<_Rep2>::value)>::type>
263 107           constexpr explicit duration(const _Rep2& __rep)
264 107           : __r(static_cast(__rep)) { }
265              
266             template
267             enable_if::value
268             || (ratio_divide<_Period2, period>::den == 1
269             && !treat_as_floating_point<_Rep2>::value)>::type>
270             constexpr duration(const duration<_Rep2, _Period2>& __d)
271             : __r(duration_cast(__d).count()) { }
272              
273             ~duration() = default;
274             duration& operator=(const duration&) = default;
275              
276             // 20.11.5.2 observer
277             constexpr rep
278 214           count() const
279 214           { return __r; }
280              
281             // 20.11.5.3 arithmetic
282             constexpr duration
283             operator+() const
284             { return *this; }
285              
286             constexpr duration
287             operator-() const
288             { return duration(-__r); }
289              
290             duration&
291             operator++()
292             {
293             ++__r;
294             return *this;
295             }
296              
297             duration
298             operator++(int)
299             { return duration(__r++); }
300              
301             duration&
302             operator--()
303             {
304             --__r;
305             return *this;
306             }
307              
308             duration
309             operator--(int)
310             { return duration(__r--); }
311              
312             duration&
313             operator+=(const duration& __d)
314             {
315             __r += __d.count();
316             return *this;
317             }
318              
319             duration&
320             operator-=(const duration& __d)
321             {
322             __r -= __d.count();
323             return *this;
324             }
325              
326             duration&
327             operator*=(const rep& __rhs)
328             {
329             __r *= __rhs;
330             return *this;
331             }
332              
333             duration&
334             operator/=(const rep& __rhs)
335             {
336             __r /= __rhs;
337             return *this;
338             }
339              
340             // DR 934.
341             template
342             typename enable_if::value,
343             duration&>::type
344             operator%=(const rep& __rhs)
345             {
346             __r %= __rhs;
347             return *this;
348             }
349              
350             template
351             typename enable_if::value,
352             duration&>::type
353             operator%=(const duration& __d)
354             {
355             __r %= __d.count();
356             return *this;
357             }
358              
359             // 20.11.5.4 special values
360             static constexpr duration
361             zero()
362             { return duration(duration_values::zero()); }
363              
364             static constexpr duration
365             min()
366             { return duration(duration_values::min()); }
367              
368             static constexpr duration
369             max()
370             { return duration(duration_values::max()); }
371              
372             private:
373             rep __r;
374             };
375              
376             template
377             typename _Rep2, typename _Period2>
378             constexpr typename common_type,
379             duration<_Rep2, _Period2>>::type
380             operator+(const duration<_Rep1, _Period1>& __lhs,
381             const duration<_Rep2, _Period2>& __rhs)
382             {
383             typedef duration<_Rep1, _Period1> __dur1;
384             typedef duration<_Rep2, _Period2> __dur2;
385             typedef typename common_type<__dur1,__dur2>::type __cd;
386             return __cd(__cd(__lhs).count() + __cd(__rhs).count());
387             }
388              
389             template
390             typename _Rep2, typename _Period2>
391             constexpr typename common_type,
392             duration<_Rep2, _Period2>>::type
393             operator-(const duration<_Rep1, _Period1>& __lhs,
394             const duration<_Rep2, _Period2>& __rhs)
395             {
396             typedef duration<_Rep1, _Period1> __dur1;
397             typedef duration<_Rep2, _Period2> __dur2;
398             typedef typename common_type<__dur1,__dur2>::type __cd;
399             return __cd(__cd(__lhs).count() - __cd(__rhs).count());
400             }
401              
402             template
403             is_convertible<_Rep2,
404             typename common_type<_Rep1, _Rep2>::type>::value>
405             struct __common_rep_type { };
406              
407             template
408             struct __common_rep_type<_Rep1, _Rep2, true>
409             { typedef typename common_type<_Rep1, _Rep2>::type type; };
410              
411             template
412             constexpr
413             duration::type, _Period>
414             operator*(const duration<_Rep1, _Period>& __d, const _Rep2& __s)
415             {
416             typedef duration::type, _Period>
417             __cd;
418             return __cd(__cd(__d).count() * __s);
419             }
420              
421             template
422             constexpr
423             duration::type, _Period>
424             operator*(const _Rep1& __s, const duration<_Rep2, _Period>& __d)
425             { return __d * __s; }
426              
427             template
428             constexpr duration
429             enable_if::value, _Rep2>::type>::type, _Period>
430             operator/(const duration<_Rep1, _Period>& __d, const _Rep2& __s)
431             {
432             typedef duration::type, _Period>
433             __cd;
434             return __cd(__cd(__d).count() / __s);
435             }
436              
437             template
438             typename _Rep2, typename _Period2>
439             constexpr typename common_type<_Rep1, _Rep2>::type
440             operator/(const duration<_Rep1, _Period1>& __lhs,
441             const duration<_Rep2, _Period2>& __rhs)
442             {
443             typedef duration<_Rep1, _Period1> __dur1;
444             typedef duration<_Rep2, _Period2> __dur2;
445             typedef typename common_type<__dur1,__dur2>::type __cd;
446             return __cd(__lhs).count() / __cd(__rhs).count();
447             }
448              
449             // DR 934.
450             template
451             constexpr duration
452             enable_if::value, _Rep2>::type>::type, _Period>
453             operator%(const duration<_Rep1, _Period>& __d, const _Rep2& __s)
454             {
455             typedef duration::type, _Period>
456             __cd;
457             return __cd(__cd(__d).count() % __s);
458             }
459              
460             template
461             typename _Rep2, typename _Period2>
462             constexpr typename common_type,
463             duration<_Rep2, _Period2>>::type
464             operator%(const duration<_Rep1, _Period1>& __lhs,
465             const duration<_Rep2, _Period2>& __rhs)
466             {
467             typedef duration<_Rep1, _Period1> __dur1;
468             typedef duration<_Rep2, _Period2> __dur2;
469             typedef typename common_type<__dur1,__dur2>::type __cd;
470             return __cd(__cd(__lhs).count() % __cd(__rhs).count());
471             }
472              
473             // comparisons
474             template
475             typename _Rep2, typename _Period2>
476             constexpr bool
477             operator==(const duration<_Rep1, _Period1>& __lhs,
478             const duration<_Rep2, _Period2>& __rhs)
479             {
480             typedef duration<_Rep1, _Period1> __dur1;
481             typedef duration<_Rep2, _Period2> __dur2;
482             typedef typename common_type<__dur1,__dur2>::type __ct;
483             return __ct(__lhs).count() == __ct(__rhs).count();
484             }
485              
486             template
487             typename _Rep2, typename _Period2>
488             constexpr bool
489             operator<(const duration<_Rep1, _Period1>& __lhs,
490             const duration<_Rep2, _Period2>& __rhs)
491             {
492             typedef duration<_Rep1, _Period1> __dur1;
493             typedef duration<_Rep2, _Period2> __dur2;
494             typedef typename common_type<__dur1,__dur2>::type __ct;
495             return __ct(__lhs).count() < __ct(__rhs).count();
496             }
497              
498             template
499             typename _Rep2, typename _Period2>
500             constexpr bool
501             operator!=(const duration<_Rep1, _Period1>& __lhs,
502             const duration<_Rep2, _Period2>& __rhs)
503             { return !(__lhs == __rhs); }
504              
505             template
506             typename _Rep2, typename _Period2>
507             constexpr bool
508             operator<=(const duration<_Rep1, _Period1>& __lhs,
509             const duration<_Rep2, _Period2>& __rhs)
510             { return !(__rhs < __lhs); }
511              
512             template
513             typename _Rep2, typename _Period2>
514             constexpr bool
515             operator>(const duration<_Rep1, _Period1>& __lhs,
516             const duration<_Rep2, _Period2>& __rhs)
517             { return __rhs < __lhs; }
518              
519             template
520             typename _Rep2, typename _Period2>
521             constexpr bool
522             operator>=(const duration<_Rep1, _Period1>& __lhs,
523             const duration<_Rep2, _Period2>& __rhs)
524             { return !(__lhs < __rhs); }
525              
526             /// nanoseconds
527             typedef duration nanoseconds;
528              
529             /// microseconds
530             typedef duration microseconds;
531              
532             /// milliseconds
533             typedef duration milliseconds;
534              
535             /// seconds
536             typedef duration seconds;
537              
538             /// minutes
539             typedef duration> minutes;
540              
541             /// hours
542             typedef duration> hours;
543              
544             /// time_point
545             template
546             struct time_point
547             {
548             typedef _Clock clock;
549             typedef _Dur duration;
550             typedef typename duration::rep rep;
551             typedef typename duration::period period;
552              
553             constexpr time_point() : __d(duration::zero())
554             { }
555              
556             constexpr explicit time_point(const duration& __dur)
557             : __d(__dur)
558             { }
559              
560             // conversions
561             template
562             constexpr time_point(const time_point& __t)
563             : __d(__t.time_since_epoch())
564             { }
565              
566             // observer
567             constexpr duration
568 107           time_since_epoch() const
569 107           { return __d; }
570              
571             // arithmetic
572             time_point&
573             operator+=(const duration& __dur)
574             {
575             __d += __dur;
576             return *this;
577             }
578              
579             time_point&
580             operator-=(const duration& __dur)
581             {
582             __d -= __dur;
583             return *this;
584             }
585              
586             // special values
587             static constexpr time_point
588             min()
589             { return time_point(duration::min()); }
590              
591             static constexpr time_point
592             max()
593             { return time_point(duration::max()); }
594              
595             private:
596             duration __d;
597             };
598              
599             /// time_point_cast
600             template
601             constexpr typename enable_if<__is_duration<_ToDur>::value,
602             time_point<_Clock, _ToDur>>::type
603             time_point_cast(const time_point<_Clock, _Dur>& __t)
604             {
605             typedef time_point<_Clock, _ToDur> __time_point;
606             return __time_point(duration_cast<_ToDur>(__t.time_since_epoch()));
607             }
608              
609             template
610             typename _Rep2, typename _Period2>
611             constexpr time_point<_Clock,
612             typename common_type<_Dur1, duration<_Rep2, _Period2>>::type>
613             operator+(const time_point<_Clock, _Dur1>& __lhs,
614             const duration<_Rep2, _Period2>& __rhs)
615             {
616             typedef duration<_Rep2, _Period2> __dur2;
617             typedef typename common_type<_Dur1,__dur2>::type __ct;
618             typedef time_point<_Clock, __ct> __time_point;
619             return __time_point(__lhs.time_since_epoch() + __rhs);
620             }
621              
622             template
623             typename _Clock, typename _Dur2>
624             constexpr time_point<_Clock,
625             typename common_type, _Dur2>::type>
626             operator+(const duration<_Rep1, _Period1>& __lhs,
627             const time_point<_Clock, _Dur2>& __rhs)
628             {
629             typedef duration<_Rep1, _Period1> __dur1;
630             typedef typename common_type<__dur1,_Dur2>::type __ct;
631             typedef time_point<_Clock, __ct> __time_point;
632             return __time_point(__rhs.time_since_epoch() + __lhs);
633             }
634              
635             template
636             typename _Rep2, typename _Period2>
637             constexpr time_point<_Clock,
638             typename common_type<_Dur1, duration<_Rep2, _Period2>>::type>
639             operator-(const time_point<_Clock, _Dur1>& __lhs,
640             const duration<_Rep2, _Period2>& __rhs)
641             {
642             typedef duration<_Rep2, _Period2> __dur2;
643             typedef typename common_type<_Dur1,__dur2>::type __ct;
644             typedef time_point<_Clock, __ct> __time_point;
645             return __time_point(__lhs.time_since_epoch() -__rhs);
646             }
647              
648             template
649             constexpr typename common_type<_Dur1, _Dur2>::type
650             operator-(const time_point<_Clock, _Dur1>& __lhs,
651             const time_point<_Clock, _Dur2>& __rhs)
652             { return __lhs.time_since_epoch() - __rhs.time_since_epoch(); }
653              
654             template
655             constexpr bool
656             operator==(const time_point<_Clock, _Dur1>& __lhs,
657             const time_point<_Clock, _Dur2>& __rhs)
658             { return __lhs.time_since_epoch() == __rhs.time_since_epoch(); }
659              
660             template
661             constexpr bool
662             operator!=(const time_point<_Clock, _Dur1>& __lhs,
663             const time_point<_Clock, _Dur2>& __rhs)
664             { return !(__lhs == __rhs); }
665              
666             template
667             constexpr bool
668             operator<(const time_point<_Clock, _Dur1>& __lhs,
669             const time_point<_Clock, _Dur2>& __rhs)
670             { return __lhs.time_since_epoch() < __rhs.time_since_epoch(); }
671              
672             template
673             constexpr bool
674             operator<=(const time_point<_Clock, _Dur1>& __lhs,
675             const time_point<_Clock, _Dur2>& __rhs)
676             { return !(__rhs < __lhs); }
677              
678             template
679             constexpr bool
680             operator>(const time_point<_Clock, _Dur1>& __lhs,
681             const time_point<_Clock, _Dur2>& __rhs)
682             { return __rhs < __lhs; }
683              
684             template
685             constexpr bool
686             operator>=(const time_point<_Clock, _Dur1>& __lhs,
687             const time_point<_Clock, _Dur2>& __rhs)
688             { return !(__lhs < __rhs); }
689              
690              
691             // Clocks.
692              
693             // Why nanosecond resolution as the default?
694             // Why have std::system_clock always count in the higest
695             // resolution (ie nanoseconds), even if on some OSes the low 3
696             // or 9 decimal digits will be always zero? This allows later
697             // implementations to change the system_clock::now()
698             // implementation any time to provide better resolution without
699             // changing function signature or units.
700              
701             // To support the (forward) evolution of the library's defined
702             // clocks, wrap inside inline namespace so that the current
703             // defintions of system_clock, steady_clock, and
704             // high_resolution_clock types are uniquely mangled. This way, new
705             // code can use the latests clocks, while the library can contain
706             // compatibility definitions for previous versions. At some
707             // point, when these clocks settle down, the inlined namespaces
708             // can be removed. XXX GLIBCXX_ABI Deprecated
709             inline namespace _V2 {
710              
711             /**
712             * @brief System clock.
713             *
714             * Time returned represents wall time from the system-wide clock.
715             */
716             struct system_clock
717             {
718             typedef chrono::nanoseconds duration;
719             typedef duration::rep rep;
720             typedef duration::period period;
721             typedef chrono::time_point time_point;
722              
723             static_assert(system_clock::duration::min()
724             < system_clock::duration::zero(),
725             "a clock's minimum duration cannot be less than its epoch");
726              
727             static constexpr bool is_steady = false;
728              
729             static time_point
730             now() noexcept;
731              
732             // Map to C API
733             static std::time_t
734             to_time_t(const time_point& __t) noexcept
735             {
736             return std::time_t(duration_cast
737             (__t.time_since_epoch()).count());
738             }
739              
740             static time_point
741             from_time_t(std::time_t __t) noexcept
742             {
743             typedef chrono::time_point __from;
744             return time_point_cast
745             (__from(chrono::seconds(__t)));
746             }
747             };
748              
749              
750             /**
751             * @brief Monotonic clock
752             *
753             * Time returned has the property of only increasing at a uniform rate.
754             */
755             struct steady_clock
756             {
757             typedef chrono::nanoseconds duration;
758             typedef duration::rep rep;
759             typedef duration::period period;
760             typedef chrono::time_point time_point;
761              
762             static constexpr bool is_steady = true;
763              
764             static time_point
765             now() noexcept;
766             };
767              
768              
769             /**
770             * @brief Highest-resolution clock
771             *
772             * This is the clock "with the shortest tick period." Alias to
773             * std::system_clock until higher-than-nanosecond definitions
774             * become feasible.
775             */
776             using high_resolution_clock = system_clock;
777              
778             } // end inline namespace _V2
779              
780             _GLIBCXX_END_NAMESPACE_VERSION
781             } // namespace chrono
782              
783             #if __cplusplus > 201103L
784              
785             #define __cpp_lib_chrono_udls 201304
786              
787             inline namespace literals
788             {
789             inline namespace chrono_literals
790             {
791              
792             template
793             struct _Checked_integral_constant
794             : integral_constant<_Rep, static_cast<_Rep>(_Val)>
795             {
796             static_assert(_Checked_integral_constant::value >= 0
797             && _Checked_integral_constant::value == _Val,
798             "literal value cannot be represented by duration type");
799             };
800              
801             template
802             constexpr _Dur __check_overflow()
803             {
804             using _Val = __parse_int::_Parse_int<_Digits...>;
805             using _Rep = typename _Dur::rep;
806             // TODO: should be simply integral_constant<_Rep, _Val::value>
807             // but GCC doesn't reject narrowing conversions to _Rep.
808             using _CheckedVal = _Checked_integral_constant<_Rep, _Val::value>;
809             return _Dur{_CheckedVal::value};
810             }
811              
812             constexpr chrono::duration>
813             operator""h(long double __hours)
814             { return chrono::duration>{__hours}; }
815              
816             template
817             constexpr chrono::hours
818             operator""h()
819             { return __check_overflow(); }
820              
821             constexpr chrono::duration>
822             operator""min(long double __mins)
823             { return chrono::duration>{__mins}; }
824              
825             template
826             constexpr chrono::minutes
827             operator""min()
828             { return __check_overflow(); }
829              
830             constexpr chrono::duration
831             operator""s(long double __secs)
832             { return chrono::duration{__secs}; }
833              
834             template
835             constexpr chrono::seconds
836             operator""s()
837             { return __check_overflow(); }
838              
839             constexpr chrono::duration
840             operator""ms(long double __msecs)
841             { return chrono::duration{__msecs}; }
842              
843             template
844             constexpr chrono::milliseconds
845             operator""ms()
846             { return __check_overflow(); }
847              
848             constexpr chrono::duration
849             operator""us(long double __usecs)
850             { return chrono::duration{__usecs}; }
851              
852             template
853             constexpr chrono::microseconds
854             operator""us()
855             { return __check_overflow(); }
856              
857             constexpr chrono::duration
858             operator""ns(long double __nsecs)
859             { return chrono::duration{__nsecs}; }
860              
861             template
862             constexpr chrono::nanoseconds
863             operator""ns()
864             { return __check_overflow(); }
865              
866             } // inline namespace chrono_literals
867             } // inline namespace literals
868              
869             namespace chrono
870             {
871             _GLIBCXX_BEGIN_NAMESPACE_VERSION
872              
873             using namespace literals::chrono_literals;
874              
875             _GLIBCXX_END_NAMESPACE_VERSION
876             } // namespace chrono
877              
878             #endif // __cplusplus > 201103L
879              
880             // @} group chrono
881             } // namespace std
882              
883             #endif //_GLIBCXX_USE_C99_STDINT_TR1
884              
885             #endif // C++11
886              
887             #endif //_GLIBCXX_CHRONO