aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3/include/std/chrono
diff options
context:
space:
mode:
Diffstat (limited to 'libstdc++-v3/include/std/chrono')
-rw-r--r--libstdc++-v3/include/std/chrono576
1 files changed, 287 insertions, 289 deletions
diff --git a/libstdc++-v3/include/std/chrono b/libstdc++-v3/include/std/chrono
index 230b7f4..1d9552a 100644
--- a/libstdc++-v3/include/std/chrono
+++ b/libstdc++-v3/include/std/chrono
@@ -46,7 +46,7 @@
#ifdef _GLIBCXX_USE_C99_STDINT_TR1
-namespace std
+namespace std
{
/**
* @defgroup chrono Time
@@ -71,71 +71,75 @@ namespace std
// 20.8.2.3 specialization of common_type (for duration)
template<typename _Rep1, typename _Period1, typename _Rep2, typename _Period2>
struct common_type<chrono::duration<_Rep1, _Period1>,
- chrono::duration<_Rep2, _Period2>>
+ chrono::duration<_Rep2, _Period2>>
{
typedef chrono::duration<typename common_type<_Rep1, _Rep2>::type,
- ratio<__static_gcd<_Period1::num, _Period2::num>::value,
- (_Period1::den / __static_gcd<_Period1::den, _Period2::den>::value)
- * _Period2::den>> type;
+ ratio<__static_gcd<_Period1::num, _Period2::num>::value,
+ (_Period1::den / __static_gcd<_Period1::den, _Period2::den>::value)
+ * _Period2::den>> type;
};
-
+
// 20.8.2.3 specialization of common_type (for time_point)
template<typename _Clock, typename _Duration1, typename _Duration2>
struct common_type<chrono::time_point<_Clock, _Duration1>,
- chrono::time_point<_Clock, _Duration2>>
+ chrono::time_point<_Clock, _Duration2>>
{
- typedef chrono::time_point<_Clock,
- typename common_type<_Duration1, _Duration2>::type> type;
+ typedef chrono::time_point<_Clock,
+ typename common_type<_Duration1, _Duration2>::type> type;
};
- namespace chrono
+ namespace chrono
{
// Primary template for duration_cast impl.
template<typename _ToDuration, typename _CF, typename _CR,
- bool _NumIsOne = false, bool _DenIsOne = false>
+ bool _NumIsOne = false, bool _DenIsOne = false>
struct __duration_cast_impl
{
- template<typename _Rep, typename _Period>
- static _ToDuration __cast(const duration<_Rep, _Period>& __d)
- {
- return _ToDuration(static_cast<
- typename _ToDuration::rep>(static_cast<_CR>(__d.count())
- * static_cast<_CR>(_CF::num)
- / static_cast<_CR>(_CF::den)));
- }
+ template<typename _Rep, typename _Period>
+ static constexpr _ToDuration
+ __cast(const duration<_Rep, _Period>& __d)
+ {
+ return _ToDuration(static_cast<
+ typename _ToDuration::rep>(static_cast<_CR>(__d.count())
+ * static_cast<_CR>(_CF::num)
+ / static_cast<_CR>(_CF::den)));
+ }
};
template<typename _ToDuration, typename _CF, typename _CR>
struct __duration_cast_impl<_ToDuration, _CF, _CR, true, true>
{
- template<typename _Rep, typename _Period>
- static _ToDuration __cast(const duration<_Rep, _Period>& __d)
- {
- return _ToDuration(
- static_cast<typename _ToDuration::rep>(__d.count()));
- }
+ template<typename _Rep, typename _Period>
+ static constexpr _ToDuration
+ __cast(const duration<_Rep, _Period>& __d)
+ {
+ return _ToDuration(
+ static_cast<typename _ToDuration::rep>(__d.count()));
+ }
};
template<typename _ToDuration, typename _CF, typename _CR>
struct __duration_cast_impl<_ToDuration, _CF, _CR, true, false>
{
- template<typename _Rep, typename _Period>
- static _ToDuration __cast(const duration<_Rep, _Period>& __d)
- {
- return _ToDuration(static_cast<typename _ToDuration::rep>(
- static_cast<_CR>(__d.count()) / static_cast<_CR>(_CF::den)));
- }
+ template<typename _Rep, typename _Period>
+ static constexpr _ToDuration
+ __cast(const duration<_Rep, _Period>& __d)
+ {
+ return _ToDuration(static_cast<typename _ToDuration::rep>(
+ static_cast<_CR>(__d.count()) / static_cast<_CR>(_CF::den)));
+ }
};
template<typename _ToDuration, typename _CF, typename _CR>
struct __duration_cast_impl<_ToDuration, _CF, _CR, false, true>
{
- template<typename _Rep, typename _Period>
- static _ToDuration __cast(const duration<_Rep, _Period>& __d)
- {
- return _ToDuration(static_cast<typename _ToDuration::rep>(
- static_cast<_CR>(__d.count()) * static_cast<_CR>(_CF::num)));
- }
+ template<typename _Rep, typename _Period>
+ static constexpr _ToDuration
+ __cast(const duration<_Rep, _Period>& __d)
+ {
+ return _ToDuration(static_cast<typename _ToDuration::rep>(
+ static_cast<_CR>(__d.count()) * static_cast<_CR>(_CF::num)));
+ }
};
template<typename _Tp>
@@ -150,17 +154,17 @@ namespace std
/// duration_cast
template<typename _ToDuration, typename _Rep, typename _Period>
- inline typename enable_if<__is_duration<_ToDuration>::value,
+ inline constexpr typename enable_if<__is_duration<_ToDuration>::value,
_ToDuration>::type
duration_cast(const duration<_Rep, _Period>& __d)
{
- typedef typename
- ratio_divide<_Period, typename _ToDuration::period>::type __cf;
- typedef typename
- common_type<typename _ToDuration::rep, _Rep, intmax_t>::type __cr;
+ typedef typename
+ ratio_divide<_Period, typename _ToDuration::period>::type __cf;
+ typedef typename
+ common_type<typename _ToDuration::rep, _Rep, intmax_t>::type __cr;
- return __duration_cast_impl<_ToDuration, __cf, __cr,
- __cf::num == 1, __cf::den == 1>::__cast(__d);
+ return __duration_cast_impl<_ToDuration, __cf, __cr,
+ __cf::num == 1, __cf::den == 1>::__cast(__d);
}
/// treat_as_floating_point
@@ -173,17 +177,17 @@ namespace std
template<typename _Rep>
struct duration_values
{
- static const _Rep
- zero()
- { return _Rep(0); }
-
- static const _Rep
- max()
- { return numeric_limits<_Rep>::max(); }
-
- static const _Rep
- min()
- { return numeric_limits<_Rep>::min(); }
+ static constexpr _Rep
+ zero()
+ { return _Rep(0); }
+
+ static constexpr _Rep
+ max()
+ { return numeric_limits<_Rep>::max(); }
+
+ static constexpr _Rep
+ min()
+ { return numeric_limits<_Rep>::min(); }
};
template<typename T>
@@ -200,98 +204,98 @@ namespace std
template<typename _Rep, typename _Period>
struct duration
{
+ typedef _Rep rep;
+ typedef _Period period;
+
static_assert(!__is_duration<_Rep>::value, "rep cannot be a duration");
- static_assert(__is_ratio<_Period>::value,
+ static_assert(__is_ratio<_Period>::value,
"period must be a specialization of ratio");
- static_assert(_Period::num > 0, "period must be positive");
-
- typedef _Rep rep;
- typedef _Period period;
-
- // 20.8.3.1 construction / copy / destroy
- duration() = default;
-
- template<typename _Rep2, typename = typename
+ static_assert(_Period::num > 0, "period must be positive");
+
+ // 20.8.3.1 construction / copy / destroy
+ constexpr duration() : __r() { }
+
+ template<typename _Rep2, typename = typename
enable_if<is_convertible<_Rep2, rep>::value
&& (treat_as_floating_point<rep>::value
|| !treat_as_floating_point<_Rep2>::value)>::type>
- explicit duration(const _Rep2& __rep)
- : __r(static_cast<rep>(__rep)) { }
+ constexpr explicit duration(const _Rep2& __rep)
+ : __r(static_cast<rep>(__rep)) { }
- template<typename _Rep2, typename _Period2, typename = typename
- enable_if<treat_as_floating_point<rep>::value
+ template<typename _Rep2, typename _Period2, typename = typename
+ enable_if<treat_as_floating_point<rep>::value
|| (ratio_divide<_Period2, period>::type::den == 1
&& !treat_as_floating_point<_Rep2>::value)>::type>
- duration(const duration<_Rep2, _Period2>& __d)
- : __r(duration_cast<duration>(__d).count()) { }
+ constexpr duration(const duration<_Rep2, _Period2>& __d)
+ : __r(duration_cast<duration>(__d).count()) { }
~duration() = default;
duration(const duration&) = default;
duration& operator=(const duration&) = default;
- // 20.8.3.2 observer
- rep
- count() const
- { return __r; }
-
- // 20.8.3.3 arithmetic
- duration
- operator+() const
- { return *this; }
-
- duration
- operator-() const
- { return duration(-__r); }
-
- duration&
- operator++()
- {
- ++__r;
- return *this;
- }
-
- duration
- operator++(int)
- { return duration(__r++); }
-
- duration&
- operator--()
- {
- --__r;
- return *this;
- }
-
- duration
- operator--(int)
- { return duration(__r--); }
-
- duration&
- operator+=(const duration& __d)
- {
- __r += __d.count();
- return *this;
- }
-
- duration&
- operator-=(const duration& __d)
- {
- __r -= __d.count();
- return *this;
- }
-
- duration&
- operator*=(const rep& __rhs)
- {
- __r *= __rhs;
- return *this;
- }
-
- duration&
- operator/=(const rep& __rhs)
- {
- __r /= __rhs;
- return *this;
- }
+ // 20.8.3.2 observer
+ constexpr rep
+ count() const
+ { return __r; }
+
+ // 20.8.3.3 arithmetic
+ constexpr duration
+ operator+() const
+ { return *this; }
+
+ constexpr duration
+ operator-() const
+ { return duration(-__r); }
+
+ duration&
+ operator++()
+ {
+ ++__r;
+ return *this;
+ }
+
+ duration
+ operator++(int)
+ { return duration(__r++); }
+
+ duration&
+ operator--()
+ {
+ --__r;
+ return *this;
+ }
+
+ duration
+ operator--(int)
+ { return duration(__r--); }
+
+ duration&
+ operator+=(const duration& __d)
+ {
+ __r += __d.count();
+ return *this;
+ }
+
+ duration&
+ operator-=(const duration& __d)
+ {
+ __r -= __d.count();
+ return *this;
+ }
+
+ duration&
+ operator*=(const rep& __rhs)
+ {
+ __r *= __rhs;
+ return *this;
+ }
+
+ duration&
+ operator/=(const rep& __rhs)
+ {
+ __r /= __rhs;
+ return *this;
+ }
// DR 934.
template<typename _Rep2 = rep>
@@ -312,46 +316,45 @@ namespace std
return *this;
}
- // 20.8.3.4 special values
- // TODO: These should be constexprs.
- static const duration
- zero()
- { return duration(duration_values<rep>::zero()); }
+ // 20.8.3.4 special values
+ static constexpr duration
+ zero()
+ { return duration(duration_values<rep>::zero()); }
+
+ static constexpr duration
+ min()
+ { return duration(duration_values<rep>::min()); }
- static const duration
- min()
- { return duration(duration_values<rep>::min()); }
-
- static const duration
- max()
- { return duration(duration_values<rep>::max()); }
+ static constexpr duration
+ max()
+ { return duration(duration_values<rep>::max()); }
private:
- rep __r;
+ rep __r;
};
template<typename _Rep1, typename _Period1,
- typename _Rep2, typename _Period2>
- inline typename common_type<duration<_Rep1, _Period1>,
- duration<_Rep2, _Period2>>::type
- operator+(const duration<_Rep1, _Period1>& __lhs,
- const duration<_Rep2, _Period2>& __rhs)
+ typename _Rep2, typename _Period2>
+ inline typename common_type<duration<_Rep1, _Period1>,
+ duration<_Rep2, _Period2>>::type
+ operator+(const duration<_Rep1, _Period1>& __lhs,
+ const duration<_Rep2, _Period2>& __rhs)
{
- typedef typename common_type<duration<_Rep1, _Period1>,
- duration<_Rep2, _Period2>>::type __ct;
- return __ct(__lhs) += __rhs;
+ typedef typename common_type<duration<_Rep1, _Period1>,
+ duration<_Rep2, _Period2>>::type __ct;
+ return __ct(__lhs) += __rhs;
}
- template<typename _Rep1, typename _Period1,
- typename _Rep2, typename _Period2>
- inline typename common_type<duration<_Rep1, _Period1>,
- duration<_Rep2, _Period2>>::type
- operator-(const duration<_Rep1, _Period1>& __lhs,
- const duration<_Rep2, _Period2>& __rhs)
+ template<typename _Rep1, typename _Period1,
+ typename _Rep2, typename _Period2>
+ inline typename common_type<duration<_Rep1, _Period1>,
+ duration<_Rep2, _Period2>>::type
+ operator-(const duration<_Rep1, _Period1>& __lhs,
+ const duration<_Rep2, _Period2>& __rhs)
{
- typedef typename common_type<duration<_Rep1, _Period1>,
- duration<_Rep2, _Period2>>::type __ct;
- return __ct(__lhs) -= __rhs;
+ typedef typename common_type<duration<_Rep1, _Period1>,
+ duration<_Rep2, _Period2>>::type __ct;
+ return __ct(__lhs) -= __rhs;
}
template<typename _Rep1, typename _Rep2, bool =
@@ -361,21 +364,21 @@ namespace std
template<typename _Rep1, typename _Rep2>
struct __common_rep_type<_Rep1, _Rep2, true>
- { typedef typename common_type<_Rep1, _Rep2>::type type; };
+ { typedef typename common_type<_Rep1, _Rep2>::type type; };
template<typename _Rep1, typename _Period, typename _Rep2>
inline duration<typename __common_rep_type<_Rep1, _Rep2>::type, _Period>
operator*(const duration<_Rep1, _Period>& __d, const _Rep2& __s)
{
- typedef typename common_type<_Rep1, _Rep2>::type __cr;
- return duration<__cr, _Period>(__d) *= __s;
+ typedef typename common_type<_Rep1, _Rep2>::type __cr;
+ return duration<__cr, _Period>(__d) *= __s;
}
template<typename _Rep1, typename _Period, typename _Rep2>
inline duration<typename __common_rep_type<_Rep2, _Rep1>::type, _Period>
operator*(const _Rep1& __s, const duration<_Rep2, _Period>& __d)
{ return __d * __s; }
-
+
template<typename _Rep1, typename _Period, typename _Rep2>
inline duration<typename __common_rep_type<_Rep1, typename
enable_if<!__is_duration<_Rep2>::value, _Rep2>::type>::type, _Period>
@@ -388,12 +391,12 @@ namespace std
template<typename _Rep1, typename _Period1,
typename _Rep2, typename _Period2>
inline typename common_type<_Rep1, _Rep2>::type
- operator/(const duration<_Rep1, _Period1>& __lhs,
- const duration<_Rep2, _Period2>& __rhs)
+ operator/(const duration<_Rep1, _Period1>& __lhs,
+ const duration<_Rep2, _Period2>& __rhs)
{
- typedef typename common_type<duration<_Rep1, _Period1>,
- duration<_Rep2, _Period2>>::type __ct;
- return __ct(__lhs).count() / __ct(__rhs).count();
+ typedef typename common_type<duration<_Rep1, _Period1>,
+ duration<_Rep2, _Period2>>::type __ct;
+ return __ct(__lhs).count() / __ct(__rhs).count();
}
// DR 934.
@@ -408,112 +411,112 @@ namespace std
template<typename _Rep1, typename _Period1,
typename _Rep2, typename _Period2>
- inline typename common_type<duration<_Rep1, _Period1>,
- duration<_Rep2, _Period2>>::type
- operator%(const duration<_Rep1, _Period1>& __lhs,
- const duration<_Rep2, _Period2>& __rhs)
+ inline typename common_type<duration<_Rep1, _Period1>,
+ duration<_Rep2, _Period2>>::type
+ operator%(const duration<_Rep1, _Period1>& __lhs,
+ const duration<_Rep2, _Period2>& __rhs)
{
- typedef typename common_type<duration<_Rep1, _Period1>,
- duration<_Rep2, _Period2>>::type __ct;
- return __ct(__lhs) %= __rhs;
+ typedef typename common_type<duration<_Rep1, _Period1>,
+ duration<_Rep2, _Period2>>::type __ct;
+ return __ct(__lhs) %= __rhs;
}
// comparisons
template<typename _Rep1, typename _Period1,
- typename _Rep2, typename _Period2>
- inline bool
- operator==(const duration<_Rep1, _Period1>& __lhs,
- const duration<_Rep2, _Period2>& __rhs)
+ typename _Rep2, typename _Period2>
+ inline constexpr bool
+ operator==(const duration<_Rep1, _Period1>& __lhs,
+ const duration<_Rep2, _Period2>& __rhs)
{
- typedef typename common_type<duration<_Rep1, _Period1>,
- duration<_Rep2, _Period2>>::type __ct;
- return __ct(__lhs).count() == __ct(__rhs).count();
+ typedef typename common_type<duration<_Rep1, _Period1>,
+ duration<_Rep2, _Period2>>::type __ct;
+ return __ct(__lhs).count() == __ct(__rhs).count();
}
template<typename _Rep1, typename _Period1,
- typename _Rep2, typename _Period2>
- inline bool
- operator<(const duration<_Rep1, _Period1>& __lhs,
- const duration<_Rep2, _Period2>& __rhs)
+ typename _Rep2, typename _Period2>
+ inline constexpr bool
+ operator<(const duration<_Rep1, _Period1>& __lhs,
+ const duration<_Rep2, _Period2>& __rhs)
{
- typedef typename common_type<duration<_Rep1, _Period1>,
- duration<_Rep2, _Period2>>::type __ct;
- return __ct(__lhs).count() < __ct(__rhs).count();
+ typedef typename common_type<duration<_Rep1, _Period1>,
+ duration<_Rep2, _Period2>>::type __ct;
+ return __ct(__lhs).count() < __ct(__rhs).count();
}
template<typename _Rep1, typename _Period1,
- typename _Rep2, typename _Period2>
- inline bool
- operator!=(const duration<_Rep1, _Period1>& __lhs,
- const duration<_Rep2, _Period2>& __rhs)
+ typename _Rep2, typename _Period2>
+ inline constexpr bool
+ operator!=(const duration<_Rep1, _Period1>& __lhs,
+ const duration<_Rep2, _Period2>& __rhs)
{ return !(__lhs == __rhs); }
template<typename _Rep1, typename _Period1,
- typename _Rep2, typename _Period2>
- inline bool
- operator<=(const duration<_Rep1, _Period1>& __lhs,
- const duration<_Rep2, _Period2>& __rhs)
+ typename _Rep2, typename _Period2>
+ inline constexpr bool
+ operator<=(const duration<_Rep1, _Period1>& __lhs,
+ const duration<_Rep2, _Period2>& __rhs)
{ return !(__rhs < __lhs); }
template<typename _Rep1, typename _Period1,
- typename _Rep2, typename _Period2>
- inline bool
- operator>(const duration<_Rep1, _Period1>& __lhs,
- const duration<_Rep2, _Period2>& __rhs)
+ typename _Rep2, typename _Period2>
+ inline constexpr bool
+ operator>(const duration<_Rep1, _Period1>& __lhs,
+ const duration<_Rep2, _Period2>& __rhs)
{ return __rhs < __lhs; }
- template<typename _Rep1, typename _Period1,
- typename _Rep2, typename _Period2>
- inline bool
- operator>=(const duration<_Rep1, _Period1>& __lhs,
- const duration<_Rep2, _Period2>& __rhs)
+ template<typename _Rep1, typename _Period1,
+ typename _Rep2, typename _Period2>
+ inline constexpr bool
+ operator>=(const duration<_Rep1, _Period1>& __lhs,
+ const duration<_Rep2, _Period2>& __rhs)
{ return !(__lhs < __rhs); }
/// nanoseconds
- typedef duration<int64_t, nano> nanoseconds;
+ typedef duration<int64_t, nano> nanoseconds;
/// microseconds
- typedef duration<int64_t, micro> microseconds;
+ typedef duration<int64_t, micro> microseconds;
/// milliseconds
- typedef duration<int64_t, milli> milliseconds;
-
+ typedef duration<int64_t, milli> milliseconds;
+
/// seconds
- typedef duration<int64_t > seconds;
+ typedef duration<int64_t> seconds;
/// minutes
- typedef duration<int, ratio< 60>> minutes;
+ typedef duration<int, ratio< 60>> minutes;
/// hours
- typedef duration<int, ratio<3600>> hours;
+ typedef duration<int, ratio<3600>> hours;
/// time_point
template<typename _Clock, typename _Duration>
struct time_point
{
- typedef _Clock clock;
- typedef _Duration duration;
- typedef typename duration::rep rep;
- typedef typename duration::period period;
+ typedef _Clock clock;
+ typedef _Duration duration;
+ typedef typename duration::rep rep;
+ typedef typename duration::period period;
- time_point() : __d(duration::zero())
+ constexpr time_point() : __d(duration::zero())
{ }
- explicit time_point(const duration& __dur)
- : __d(duration::zero() + __dur)
+ constexpr explicit time_point(const duration& __dur)
+ : __d(__dur)
{ }
// conversions
template<typename _Duration2>
- time_point(const time_point<clock, _Duration2>& __t)
+ constexpr time_point(const time_point<clock, _Duration2>& __t)
: __d(__t.time_since_epoch())
{ }
// observer
- duration
+ constexpr duration
time_since_epoch() const
{ return __d; }
-
+
// arithmetic
time_point&
operator+=(const duration& __dur)
@@ -521,124 +524,127 @@ namespace std
__d += __dur;
return *this;
}
-
+
time_point&
operator-=(const duration& __dur)
{
__d -= __dur;
return *this;
}
-
+
// special values
- // TODO: These should be constexprs.
- static const time_point
+ static constexpr time_point
min()
{ return time_point(duration::min()); }
-
- static const time_point
+
+ static constexpr time_point
max()
{ return time_point(duration::max()); }
-
+
private:
duration __d;
};
-
+
/// time_point_cast
template<typename _ToDuration, typename _Clock, typename _Duration>
- inline typename enable_if<__is_duration<_ToDuration>::value,
+ inline constexpr typename enable_if<__is_duration<_ToDuration>::value,
time_point<_Clock, _ToDuration>>::type
time_point_cast(const time_point<_Clock, _Duration>& __t)
{
- return time_point<_Clock, _ToDuration>(
- duration_cast<_ToDuration>(__t.time_since_epoch()));
+ return time_point<_Clock, _ToDuration>(
+ duration_cast<_ToDuration>(__t.time_since_epoch()));
}
template<typename _Clock, typename _Duration1,
- typename _Rep2, typename _Period2>
- inline time_point<_Clock,
- typename common_type<_Duration1, duration<_Rep2, _Period2>>::type>
- operator+(const time_point<_Clock, _Duration1>& __lhs,
- const duration<_Rep2, _Period2>& __rhs)
+ typename _Rep2, typename _Period2>
+ inline time_point<_Clock,
+ typename common_type<_Duration1, duration<_Rep2, _Period2>>::type>
+ operator+(const time_point<_Clock, _Duration1>& __lhs,
+ const duration<_Rep2, _Period2>& __rhs)
{
- typedef time_point<_Clock,
- typename common_type<_Duration1,
- duration<_Rep2, _Period2>>::type> __ct;
- return __ct(__lhs) += __rhs;
+ typedef time_point<_Clock,
+ typename common_type<_Duration1,
+ duration<_Rep2, _Period2>>::type> __ct;
+ return __ct(__lhs) += __rhs;
}
template<typename _Rep1, typename _Period1,
- typename _Clock, typename _Duration2>
- inline time_point<_Clock,
- typename common_type<duration<_Rep1, _Period1>, _Duration2>::type>
- operator+(const duration<_Rep1, _Period1>& __lhs,
- const time_point<_Clock, _Duration2>& __rhs)
+ typename _Clock, typename _Duration2>
+ inline time_point<_Clock,
+ typename common_type<duration<_Rep1, _Period1>, _Duration2>::type>
+ operator+(const duration<_Rep1, _Period1>& __lhs,
+ const time_point<_Clock, _Duration2>& __rhs)
{ return __rhs + __lhs; }
template<typename _Clock, typename _Duration1,
- typename _Rep2, typename _Period2>
- inline time_point<_Clock,
- typename common_type<_Duration1, duration<_Rep2, _Period2>>::type>
- operator-(const time_point<_Clock, _Duration1>& __lhs,
- const duration<_Rep2, _Period2>& __rhs)
+ typename _Rep2, typename _Period2>
+ inline time_point<_Clock,
+ typename common_type<_Duration1, duration<_Rep2, _Period2>>::type>
+ operator-(const time_point<_Clock, _Duration1>& __lhs,
+ const duration<_Rep2, _Period2>& __rhs)
{ return __lhs + (-__rhs); }
template<typename _Clock, typename _Duration1, typename _Duration2>
inline typename common_type<_Duration1, _Duration2>::type
- operator-(const time_point<_Clock, _Duration1>& __lhs,
- const time_point<_Clock, _Duration2>& __rhs)
+ operator-(const time_point<_Clock, _Duration1>& __lhs,
+ const time_point<_Clock, _Duration2>& __rhs)
{ return __lhs.time_since_epoch() - __rhs.time_since_epoch(); }
template<typename _Clock, typename _Duration1, typename _Duration2>
- inline bool
+ inline constexpr bool
operator==(const time_point<_Clock, _Duration1>& __lhs,
- const time_point<_Clock, _Duration2>& __rhs)
+ const time_point<_Clock, _Duration2>& __rhs)
{ return __lhs.time_since_epoch() == __rhs.time_since_epoch(); }
template<typename _Clock, typename _Duration1, typename _Duration2>
- inline bool
+ inline constexpr bool
operator!=(const time_point<_Clock, _Duration1>& __lhs,
- const time_point<_Clock, _Duration2>& __rhs)
+ const time_point<_Clock, _Duration2>& __rhs)
{ return !(__lhs == __rhs); }
template<typename _Clock, typename _Duration1, typename _Duration2>
- inline bool
+ inline constexpr bool
operator<(const time_point<_Clock, _Duration1>& __lhs,
- const time_point<_Clock, _Duration2>& __rhs)
+ const time_point<_Clock, _Duration2>& __rhs)
{ return __lhs.time_since_epoch() < __rhs.time_since_epoch(); }
template<typename _Clock, typename _Duration1, typename _Duration2>
- inline bool
+ inline constexpr bool
operator<=(const time_point<_Clock, _Duration1>& __lhs,
- const time_point<_Clock, _Duration2>& __rhs)
+ const time_point<_Clock, _Duration2>& __rhs)
{ return !(__rhs < __lhs); }
template<typename _Clock, typename _Duration1, typename _Duration2>
- inline bool
+ inline constexpr bool
operator>(const time_point<_Clock, _Duration1>& __lhs,
- const time_point<_Clock, _Duration2>& __rhs)
+ const time_point<_Clock, _Duration2>& __rhs)
{ return __rhs < __lhs; }
template<typename _Clock, typename _Duration1, typename _Duration2>
- inline bool
+ inline constexpr bool
operator>=(const time_point<_Clock, _Duration1>& __lhs,
- const time_point<_Clock, _Duration2>& __rhs)
+ const time_point<_Clock, _Duration2>& __rhs)
{ return !(__lhs < __rhs); }
/// system_clock
struct system_clock
{
#ifdef _GLIBCXX_USE_CLOCK_REALTIME
- typedef chrono::nanoseconds duration;
+ typedef chrono::nanoseconds duration;
#elif defined(_GLIBCXX_USE_GETTIMEOFDAY)
- typedef chrono::microseconds duration;
+ typedef chrono::microseconds duration;
#else
- typedef chrono::seconds duration;
+ typedef chrono::seconds duration;
#endif
typedef duration::rep rep;
typedef duration::period period;
typedef chrono::time_point<system_clock, duration> time_point;
+ static_assert(system_clock::duration::min()
+ < system_clock::duration::zero(),
+ "a clock's minimum duration cannot be less than its epoch");
+
static const bool is_monotonic = false;
static time_point
@@ -648,25 +654,17 @@ namespace std
static std::time_t
to_time_t(const time_point& __t)
{
- return std::time_t(
- duration_cast<chrono::seconds>(__t.time_since_epoch()).count());
+ return std::time_t(
+ duration_cast<chrono::seconds>(__t.time_since_epoch()).count());
}
static time_point
from_time_t(std::time_t __t)
- {
- return time_point_cast<system_clock::duration>(
- chrono::time_point<system_clock, chrono::seconds>(
- chrono::seconds(__t)));
+ {
+ return time_point_cast<system_clock::duration>(
+ chrono::time_point<system_clock, chrono::seconds>(
+ chrono::seconds(__t)));
}
-
- // TODO: requires constexpr
- /*
- static_assert(
- system_clock::duration::min() <
- system_clock::duration::zero(),
- "a clock's minimum duration cannot be less than its epoch");
- */
};
#ifdef _GLIBCXX_USE_CLOCK_MONOTONIC