Skip to content

Commit 7c010bf

Browse files
authored
[libc++] Remove some unnecessary boilerplate in <__chrono/duration.h> (#116238)
1 parent 206ee71 commit 7c010bf

File tree

7 files changed

+26
-30
lines changed

7 files changed

+26
-30
lines changed

libcxx/include/__chrono/convert_to_tm.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ _LIBCPP_HIDE_FROM_ABI _Tm __convert_to_tm(const _ChronoT& __value) {
116116
return std::__convert_to_tm<_Tm>(chrono::sys_time<typename _ChronoT::duration>{__value.time_since_epoch()});
117117
else
118118
static_assert(sizeof(_ChronoT) == 0, "TODO: Add the missing clock specialization");
119-
} else if constexpr (chrono::__is_duration<_ChronoT>::value) {
119+
} else if constexpr (chrono::__is_duration_v<_ChronoT>) {
120120
// [time.format]/6
121121
// ... However, if a flag refers to a "time of day" (e.g. %H, %I, %p,
122122
// etc.), then a specialization of duration is interpreted as the time of

libcxx/include/__chrono/duration.h

+13-14
Original file line numberDiff line numberDiff line change
@@ -35,26 +35,25 @@ template <class _Rep, class _Period = ratio<1> >
3535
class _LIBCPP_TEMPLATE_VIS duration;
3636

3737
template <class _Tp>
38-
struct __is_duration : false_type {};
38+
inline const bool __is_duration_v = false;
3939

4040
template <class _Rep, class _Period>
41-
struct __is_duration<duration<_Rep, _Period> > : true_type {};
41+
inline const bool __is_duration_v<duration<_Rep, _Period> > = true;
4242

4343
template <class _Rep, class _Period>
44-
struct __is_duration<const duration<_Rep, _Period> > : true_type {};
44+
inline const bool __is_duration_v<const duration<_Rep, _Period> > = true;
4545

4646
template <class _Rep, class _Period>
47-
struct __is_duration<volatile duration<_Rep, _Period> > : true_type {};
47+
inline const bool __is_duration_v<volatile duration<_Rep, _Period> > = true;
4848

4949
template <class _Rep, class _Period>
50-
struct __is_duration<const volatile duration<_Rep, _Period> > : true_type {};
50+
inline const bool __is_duration_v<const volatile duration<_Rep, _Period> > = true;
5151

5252
} // namespace chrono
5353

5454
template <class _Rep1, class _Period1, class _Rep2, class _Period2>
5555
struct _LIBCPP_TEMPLATE_VIS common_type<chrono::duration<_Rep1, _Period1>, chrono::duration<_Rep2, _Period2> > {
56-
typedef chrono::duration<typename common_type<_Rep1, _Rep2>::type, typename __ratio_gcd<_Period1, _Period2>::type>
57-
type;
56+
typedef chrono::duration<typename common_type<_Rep1, _Rep2>::type, __ratio_gcd<_Period1, _Period2> > type;
5857
};
5958

6059
namespace chrono {
@@ -102,7 +101,7 @@ struct __duration_cast<_FromDuration, _ToDuration, _Period, false, false> {
102101
}
103102
};
104103

105-
template <class _ToDuration, class _Rep, class _Period, __enable_if_t<__is_duration<_ToDuration>::value, int> = 0>
104+
template <class _ToDuration, class _Rep, class _Period, __enable_if_t<__is_duration_v<_ToDuration>, int> = 0>
106105
inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR _ToDuration duration_cast(const duration<_Rep, _Period>& __fd) {
107106
return __duration_cast<duration<_Rep, _Period>, _ToDuration>()(__fd);
108107
}
@@ -124,23 +123,23 @@ struct _LIBCPP_TEMPLATE_VIS duration_values {
124123
};
125124

126125
#if _LIBCPP_STD_VER >= 17
127-
template <class _ToDuration, class _Rep, class _Period, enable_if_t<__is_duration<_ToDuration>::value, int> = 0>
126+
template <class _ToDuration, class _Rep, class _Period, enable_if_t<__is_duration_v<_ToDuration>, int> = 0>
128127
inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR _ToDuration floor(const duration<_Rep, _Period>& __d) {
129128
_ToDuration __t = chrono::duration_cast<_ToDuration>(__d);
130129
if (__t > __d)
131130
__t = __t - _ToDuration{1};
132131
return __t;
133132
}
134133

135-
template <class _ToDuration, class _Rep, class _Period, enable_if_t<__is_duration<_ToDuration>::value, int> = 0>
134+
template <class _ToDuration, class _Rep, class _Period, enable_if_t<__is_duration_v<_ToDuration>, int> = 0>
136135
inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR _ToDuration ceil(const duration<_Rep, _Period>& __d) {
137136
_ToDuration __t = chrono::duration_cast<_ToDuration>(__d);
138137
if (__t < __d)
139138
__t = __t + _ToDuration{1};
140139
return __t;
141140
}
142141

143-
template <class _ToDuration, class _Rep, class _Period, enable_if_t<__is_duration<_ToDuration>::value, int> = 0>
142+
template <class _ToDuration, class _Rep, class _Period, enable_if_t<__is_duration_v<_ToDuration>, int> = 0>
144143
inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR _ToDuration round(const duration<_Rep, _Period>& __d) {
145144
_ToDuration __lower = chrono::floor<_ToDuration>(__d);
146145
_ToDuration __upper = __lower + _ToDuration{1};
@@ -158,7 +157,7 @@ inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR _ToDuration round(const duration<
158157

159158
template <class _Rep, class _Period>
160159
class _LIBCPP_TEMPLATE_VIS duration {
161-
static_assert(!__is_duration<_Rep>::value, "A duration representation can not be a duration");
160+
static_assert(!__is_duration_v<_Rep>, "A duration representation can not be a duration");
162161
static_assert(__is_ratio_v<_Period>, "Second template parameter of duration must be a std::ratio");
163162
static_assert(_Period::num > 0, "duration period must be positive");
164163

@@ -434,7 +433,7 @@ operator*(const _Rep1& __s, const duration<_Rep2, _Period>& __d) {
434433
template <class _Rep1,
435434
class _Period,
436435
class _Rep2,
437-
__enable_if_t<!__is_duration<_Rep2>::value &&
436+
__enable_if_t<!__is_duration_v<_Rep2> &&
438437
is_convertible<const _Rep2&, typename common_type<_Rep1, _Rep2>::type>::value,
439438
int> = 0>
440439
inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR duration<typename common_type<_Rep1, _Rep2>::type, _Period>
@@ -456,7 +455,7 @@ operator/(const duration<_Rep1, _Period1>& __lhs, const duration<_Rep2, _Period2
456455
template <class _Rep1,
457456
class _Period,
458457
class _Rep2,
459-
__enable_if_t<!__is_duration<_Rep2>::value &&
458+
__enable_if_t<!__is_duration_v<_Rep2> &&
460459
is_convertible<const _Rep2&, typename common_type<_Rep1, _Rep2>::type>::value,
461460
int> = 0>
462461
inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR duration<typename common_type<_Rep1, _Rep2>::type, _Period>

libcxx/include/__chrono/formatter.h

+5-5
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ consteval bool __use_fraction() {
159159
else if constexpr (__is_specialization_v<_Tp, chrono::zoned_time>)
160160
return chrono::hh_mm_ss<typename _Tp::duration>::fractional_width;
161161
# endif
162-
else if constexpr (chrono::__is_duration<_Tp>::value)
162+
else if constexpr (chrono::__is_duration_v<_Tp>)
163163
return chrono::hh_mm_ss<_Tp>::fractional_width;
164164
else if constexpr (__is_hh_mm_ss<_Tp>)
165165
return _Tp::fractional_width;
@@ -273,7 +273,7 @@ _LIBCPP_HIDE_FROM_ABI void __format_chrono_using_chrono_specs(
273273
} break;
274274

275275
case _CharT('j'):
276-
if constexpr (chrono::__is_duration<_Tp>::value)
276+
if constexpr (chrono::__is_duration_v<_Tp>)
277277
// Converting a duration where the period has a small ratio to days
278278
// may fail to compile. This due to loss of precision in the
279279
// conversion. In order to avoid that issue convert to seconds as
@@ -285,7 +285,7 @@ _LIBCPP_HIDE_FROM_ABI void __format_chrono_using_chrono_specs(
285285
break;
286286

287287
case _CharT('q'):
288-
if constexpr (chrono::__is_duration<_Tp>::value) {
288+
if constexpr (chrono::__is_duration_v<_Tp>) {
289289
__sstr << chrono::__units_suffix<_CharT, typename _Tp::period>();
290290
break;
291291
}
@@ -301,7 +301,7 @@ _LIBCPP_HIDE_FROM_ABI void __format_chrono_using_chrono_specs(
301301
// MSVC STL ignores precision but uses separator
302302
// FMT honours precision and has a bug for separator
303303
// https://godbolt.org/z/78b7sMxns
304-
if constexpr (chrono::__is_duration<_Tp>::value) {
304+
if constexpr (chrono::__is_duration_v<_Tp>) {
305305
__sstr << std::format(_LIBCPP_STATICALLY_WIDEN(_CharT, "{}"), __value.count());
306306
break;
307307
}
@@ -627,7 +627,7 @@ __format_chrono(const _Tp& __value,
627627
if (__chrono_specs.empty())
628628
__sstr << __value;
629629
else {
630-
if constexpr (chrono::__is_duration<_Tp>::value) {
630+
if constexpr (chrono::__is_duration_v<_Tp>) {
631631
// A duration can be a user defined arithmetic type. Users may specialize
632632
// numeric_limits, but they may not specialize is_signed.
633633
if constexpr (numeric_limits<typename _Tp::rep>::is_signed) {

libcxx/include/__chrono/hh_mm_ss.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ namespace chrono {
2929
template <class _Duration>
3030
class hh_mm_ss {
3131
private:
32-
static_assert(__is_duration<_Duration>::value, "template parameter of hh_mm_ss must be a std::chrono::duration");
32+
static_assert(__is_duration_v<_Duration>, "template parameter of hh_mm_ss must be a std::chrono::duration");
3333
using __CommonType = common_type_t<_Duration, chrono::seconds>;
3434

3535
_LIBCPP_HIDE_FROM_ABI static constexpr uint64_t __pow10(unsigned __exp) {

libcxx/include/__chrono/time_point.h

+4-5
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,7 @@ namespace chrono {
3232

3333
template <class _Clock, class _Duration = typename _Clock::duration>
3434
class _LIBCPP_TEMPLATE_VIS time_point {
35-
static_assert(__is_duration<_Duration>::value,
36-
"Second template parameter of time_point must be a std::chrono::duration");
35+
static_assert(__is_duration_v<_Duration>, "Second template parameter of time_point must be a std::chrono::duration");
3736

3837
public:
3938
typedef _Clock clock;
@@ -91,17 +90,17 @@ time_point_cast(const time_point<_Clock, _Duration>& __t) {
9190
}
9291

9392
#if _LIBCPP_STD_VER >= 17
94-
template <class _ToDuration, class _Clock, class _Duration, enable_if_t<__is_duration<_ToDuration>::value, int> = 0>
93+
template <class _ToDuration, class _Clock, class _Duration, enable_if_t<__is_duration_v<_ToDuration>, int> = 0>
9594
inline _LIBCPP_HIDE_FROM_ABI constexpr time_point<_Clock, _ToDuration> floor(const time_point<_Clock, _Duration>& __t) {
9695
return time_point<_Clock, _ToDuration>{chrono::floor<_ToDuration>(__t.time_since_epoch())};
9796
}
9897

99-
template <class _ToDuration, class _Clock, class _Duration, enable_if_t<__is_duration<_ToDuration>::value, int> = 0>
98+
template <class _ToDuration, class _Clock, class _Duration, enable_if_t<__is_duration_v<_ToDuration>, int> = 0>
10099
inline _LIBCPP_HIDE_FROM_ABI constexpr time_point<_Clock, _ToDuration> ceil(const time_point<_Clock, _Duration>& __t) {
101100
return time_point<_Clock, _ToDuration>{chrono::ceil<_ToDuration>(__t.time_since_epoch())};
102101
}
103102

104-
template <class _ToDuration, class _Clock, class _Duration, enable_if_t<__is_duration<_ToDuration>::value, int> = 0>
103+
template <class _ToDuration, class _Clock, class _Duration, enable_if_t<__is_duration_v<_ToDuration>, int> = 0>
105104
inline _LIBCPP_HIDE_FROM_ABI constexpr time_point<_Clock, _ToDuration> round(const time_point<_Clock, _Duration>& __t) {
106105
return time_point<_Clock, _ToDuration>{chrono::round<_ToDuration>(__t.time_since_epoch())};
107106
}

libcxx/include/__chrono/zoned_time.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ struct zoned_traits<const time_zone*> {
5858
template <class _Duration, class _TimeZonePtr = const time_zone*>
5959
class zoned_time {
6060
// [time.zone.zonedtime.ctor]/2
61-
static_assert(__is_duration<_Duration>::value,
61+
static_assert(__is_duration_v<_Duration>,
6262
"the program is ill-formed since _Duration is not a specialization of std::chrono::duration");
6363

6464
// The wording uses the constraints like

libcxx/include/ratio

+1-3
Original file line numberDiff line numberDiff line change
@@ -462,9 +462,7 @@ struct _LIBCPP_TEMPLATE_VIS ratio_greater_equal : _BoolConstant<!ratio_less<_R1,
462462
};
463463

464464
template <class _R1, class _R2>
465-
struct __ratio_gcd {
466-
typedef ratio<__static_gcd<_R1::num, _R2::num>, __static_lcm<_R1::den, _R2::den> > type;
467-
};
465+
using __ratio_gcd = ratio<__static_gcd<_R1::num, _R2::num>, __static_lcm<_R1::den, _R2::den> >;
468466

469467
#if _LIBCPP_STD_VER >= 17
470468
template <class _R1, class _R2>

0 commit comments

Comments
 (0)