[libcxx-commits] [libcxx] [libc++][chrono] Applied `[[nodiscard]]` to The Civil Calendar (PR #174968)
Hristo Hristov via libcxx-commits
libcxx-commits at lists.llvm.org
Thu Jan 8 04:50:24 PST 2026
https://github.com/H-G-Hristov created https://github.com/llvm/llvm-project/pull/174968
- https://libcxx.llvm.org/CodingGuidelines.html
- https://wg21.link/time.cal
Towards #172124
>From 8c759f2c6c534a248e7bebb18e34fe2892b9751e Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Thu, 8 Jan 2026 14:50:01 +0200
Subject: [PATCH] [libc++][chrono] Applied `[[nodiscard]]` to The Civil
Calendar
- https://libcxx.llvm.org/CodingGuidelines.html
- https://wg21.link/time.cal
Towards #172124
---
libcxx/include/__chrono/day.h | 14 +-
libcxx/include/__chrono/hh_mm_ss.h | 20 +-
libcxx/include/__chrono/literals.h | 4 +-
libcxx/include/__chrono/month.h | 12 +-
libcxx/include/__chrono/month_weekday.h | 40 ++-
libcxx/test/libcxx/time/nodiscard.verify.cpp | 328 +++++++++++++------
6 files changed, 274 insertions(+), 144 deletions(-)
diff --git a/libcxx/include/__chrono/day.h b/libcxx/include/__chrono/day.h
index 46822c599192d..58fdc72616cb6 100644
--- a/libcxx/include/__chrono/day.h
+++ b/libcxx/include/__chrono/day.h
@@ -55,7 +55,7 @@ class day {
_LIBCPP_HIDE_FROM_ABI constexpr day& operator+=(const days& __dd) noexcept;
_LIBCPP_HIDE_FROM_ABI constexpr day& operator-=(const days& __dd) noexcept;
_LIBCPP_HIDE_FROM_ABI explicit inline constexpr operator unsigned() const noexcept { return __d_; }
- _LIBCPP_HIDE_FROM_ABI inline constexpr bool ok() const noexcept { return __d_ >= 1 && __d_ <= 31; }
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr bool ok() const noexcept { return __d_ >= 1 && __d_ <= 31; }
};
_LIBCPP_HIDE_FROM_ABI inline constexpr bool operator==(const day& __lhs, const day& __rhs) noexcept {
@@ -66,19 +66,19 @@ _LIBCPP_HIDE_FROM_ABI inline constexpr strong_ordering operator<=>(const day& __
return static_cast<unsigned>(__lhs) <=> static_cast<unsigned>(__rhs);
}
-_LIBCPP_HIDE_FROM_ABI inline constexpr day operator+(const day& __lhs, const days& __rhs) noexcept {
+[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr day operator+(const day& __lhs, const days& __rhs) noexcept {
return day(static_cast<unsigned>(__lhs) + __rhs.count());
}
-_LIBCPP_HIDE_FROM_ABI inline constexpr day operator+(const days& __lhs, const day& __rhs) noexcept {
+[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr day operator+(const days& __lhs, const day& __rhs) noexcept {
return __rhs + __lhs;
}
-_LIBCPP_HIDE_FROM_ABI inline constexpr day operator-(const day& __lhs, const days& __rhs) noexcept {
+[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr day operator-(const day& __lhs, const days& __rhs) noexcept {
return __lhs + -__rhs;
}
-_LIBCPP_HIDE_FROM_ABI inline constexpr days operator-(const day& __lhs, const day& __rhs) noexcept {
+[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr days operator-(const day& __lhs, const day& __rhs) noexcept {
return days(static_cast<int>(static_cast<unsigned>(__lhs)) - static_cast<int>(static_cast<unsigned>(__rhs)));
}
@@ -98,7 +98,9 @@ _LIBCPP_HIDE_FROM_ABI inline constexpr day& day::operator-=(const days& __dd) no
template <>
struct hash<chrono::day> {
- _LIBCPP_HIDE_FROM_ABI static size_t operator()(const chrono::day& __d) noexcept { return static_cast<unsigned>(__d); }
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static size_t operator()(const chrono::day& __d) noexcept {
+ return static_cast<unsigned>(__d);
+ }
};
# endif // _LIBCPP_STD_VER >= 26
diff --git a/libcxx/include/__chrono/hh_mm_ss.h b/libcxx/include/__chrono/hh_mm_ss.h
index 6ea8a28ee0938..746eba903d4f8 100644
--- a/libcxx/include/__chrono/hh_mm_ss.h
+++ b/libcxx/include/__chrono/hh_mm_ss.h
@@ -59,13 +59,13 @@ class hh_mm_ss {
__s_(chrono::duration_cast<chrono::seconds>(chrono::abs(__d) - hours() - minutes())),
__f_(chrono::duration_cast<precision>(chrono::abs(__d) - hours() - minutes() - seconds())) {}
- _LIBCPP_HIDE_FROM_ABI constexpr bool is_negative() const noexcept { return __is_neg_; }
- _LIBCPP_HIDE_FROM_ABI constexpr chrono::hours hours() const noexcept { return __h_; }
- _LIBCPP_HIDE_FROM_ABI constexpr chrono::minutes minutes() const noexcept { return __m_; }
- _LIBCPP_HIDE_FROM_ABI constexpr chrono::seconds seconds() const noexcept { return __s_; }
- _LIBCPP_HIDE_FROM_ABI constexpr precision subseconds() const noexcept { return __f_; }
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool is_negative() const noexcept { return __is_neg_; }
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr chrono::hours hours() const noexcept { return __h_; }
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr chrono::minutes minutes() const noexcept { return __m_; }
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr chrono::seconds seconds() const noexcept { return __s_; }
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr precision subseconds() const noexcept { return __f_; }
- _LIBCPP_HIDE_FROM_ABI constexpr precision to_duration() const noexcept {
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr precision to_duration() const noexcept {
auto __dur = __h_ + __m_ + __s_ + __f_;
return __is_neg_ ? -__dur : __dur;
}
@@ -81,14 +81,14 @@ class hh_mm_ss {
};
_LIBCPP_CTAD_SUPPORTED_FOR_TYPE(hh_mm_ss);
-_LIBCPP_HIDE_FROM_ABI inline constexpr bool is_am(const hours& __h) noexcept {
+[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr bool is_am(const hours& __h) noexcept {
return __h >= hours(0) && __h < hours(12);
}
-_LIBCPP_HIDE_FROM_ABI inline constexpr bool is_pm(const hours& __h) noexcept {
+[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr bool is_pm(const hours& __h) noexcept {
return __h >= hours(12) && __h < hours(24);
}
-_LIBCPP_HIDE_FROM_ABI inline constexpr hours make12(const hours& __h) noexcept {
+[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr hours make12(const hours& __h) noexcept {
if (__h == hours(0))
return hours(12);
else if (__h <= hours(12))
@@ -97,7 +97,7 @@ _LIBCPP_HIDE_FROM_ABI inline constexpr hours make12(const hours& __h) noexcept {
return __h - hours(12);
}
-_LIBCPP_HIDE_FROM_ABI inline constexpr hours make24(const hours& __h, bool __is_pm) noexcept {
+[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr hours make24(const hours& __h, bool __is_pm) noexcept {
if (__is_pm)
return __h == hours(12) ? __h : __h + hours(12);
else
diff --git a/libcxx/include/__chrono/literals.h b/libcxx/include/__chrono/literals.h
index 89800440edf43..b26acbafbf834 100644
--- a/libcxx/include/__chrono/literals.h
+++ b/libcxx/include/__chrono/literals.h
@@ -24,11 +24,11 @@ _LIBCPP_BEGIN_NAMESPACE_STD
inline namespace literals {
inline namespace chrono_literals {
-_LIBCPP_HIDE_FROM_ABI constexpr chrono::day operator""d(unsigned long long __d) noexcept {
+[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr chrono::day operator""d(unsigned long long __d) noexcept {
return chrono::day(static_cast<unsigned>(__d));
}
-_LIBCPP_HIDE_FROM_ABI constexpr chrono::year operator""y(unsigned long long __y) noexcept {
+[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr chrono::year operator""y(unsigned long long __y) noexcept {
return chrono::year(static_cast<int>(__y));
}
} // namespace chrono_literals
diff --git a/libcxx/include/__chrono/month.h b/libcxx/include/__chrono/month.h
index 669ac66360ab6..abf07e89a556b 100644
--- a/libcxx/include/__chrono/month.h
+++ b/libcxx/include/__chrono/month.h
@@ -55,7 +55,7 @@ class month {
_LIBCPP_HIDE_FROM_ABI constexpr month& operator+=(const months& __m1) noexcept;
_LIBCPP_HIDE_FROM_ABI constexpr month& operator-=(const months& __m1) noexcept;
_LIBCPP_HIDE_FROM_ABI explicit inline constexpr operator unsigned() const noexcept { return __m_; }
- _LIBCPP_HIDE_FROM_ABI inline constexpr bool ok() const noexcept { return __m_ >= 1 && __m_ <= 12; }
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr bool ok() const noexcept { return __m_ >= 1 && __m_ <= 12; }
};
_LIBCPP_HIDE_FROM_ABI inline constexpr bool operator==(const month& __lhs, const month& __rhs) noexcept {
@@ -66,21 +66,21 @@ _LIBCPP_HIDE_FROM_ABI inline constexpr strong_ordering operator<=>(const month&
return static_cast<unsigned>(__lhs) <=> static_cast<unsigned>(__rhs);
}
-_LIBCPP_HIDE_FROM_ABI inline constexpr month operator+(const month& __lhs, const months& __rhs) noexcept {
+[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr month operator+(const month& __lhs, const months& __rhs) noexcept {
auto const __mu = static_cast<long long>(static_cast<unsigned>(__lhs)) + (__rhs.count() - 1);
auto const __yr = (__mu >= 0 ? __mu : __mu - 11) / 12;
return month{static_cast<unsigned>(__mu - __yr * 12 + 1)};
}
-_LIBCPP_HIDE_FROM_ABI inline constexpr month operator+(const months& __lhs, const month& __rhs) noexcept {
+[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr month operator+(const months& __lhs, const month& __rhs) noexcept {
return __rhs + __lhs;
}
-_LIBCPP_HIDE_FROM_ABI inline constexpr month operator-(const month& __lhs, const months& __rhs) noexcept {
+[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr month operator-(const month& __lhs, const months& __rhs) noexcept {
return __lhs + -__rhs;
}
-_LIBCPP_HIDE_FROM_ABI inline constexpr months operator-(const month& __lhs, const month& __rhs) noexcept {
+[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr months operator-(const month& __lhs, const month& __rhs) noexcept {
auto const __dm = static_cast<unsigned>(__lhs) - static_cast<unsigned>(__rhs);
return months(__dm <= 11 ? __dm : __dm + 12);
}
@@ -114,7 +114,7 @@ inline constexpr month December{12};
template <>
struct hash<chrono::month> {
- _LIBCPP_HIDE_FROM_ABI static size_t operator()(const chrono::month& __m) noexcept {
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static size_t operator()(const chrono::month& __m) noexcept {
return static_cast<unsigned>(__m);
}
};
diff --git a/libcxx/include/__chrono/month_weekday.h b/libcxx/include/__chrono/month_weekday.h
index edb7d386067d8..f149806dc6c7c 100644
--- a/libcxx/include/__chrono/month_weekday.h
+++ b/libcxx/include/__chrono/month_weekday.h
@@ -35,9 +35,11 @@ class month_weekday {
_LIBCPP_HIDE_FROM_ABI constexpr month_weekday(const chrono::month& __mval,
const chrono::weekday_indexed& __wdival) noexcept
: __m_{__mval}, __wdi_{__wdival} {}
- _LIBCPP_HIDE_FROM_ABI inline constexpr chrono::month month() const noexcept { return __m_; }
- _LIBCPP_HIDE_FROM_ABI inline constexpr chrono::weekday_indexed weekday_indexed() const noexcept { return __wdi_; }
- _LIBCPP_HIDE_FROM_ABI inline constexpr bool ok() const noexcept { return __m_.ok() && __wdi_.ok(); }
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr chrono::month month() const noexcept { return __m_; }
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr chrono::weekday_indexed weekday_indexed() const noexcept {
+ return __wdi_;
+ }
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr bool ok() const noexcept { return __m_.ok() && __wdi_.ok(); }
};
_LIBCPP_HIDE_FROM_ABI inline constexpr bool
@@ -45,21 +47,23 @@ operator==(const month_weekday& __lhs, const month_weekday& __rhs) noexcept {
return __lhs.month() == __rhs.month() && __lhs.weekday_indexed() == __rhs.weekday_indexed();
}
-_LIBCPP_HIDE_FROM_ABI inline constexpr month_weekday
+[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr month_weekday
operator/(const month& __lhs, const weekday_indexed& __rhs) noexcept {
return month_weekday{__lhs, __rhs};
}
-_LIBCPP_HIDE_FROM_ABI inline constexpr month_weekday operator/(int __lhs, const weekday_indexed& __rhs) noexcept {
+[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr month_weekday
+operator/(int __lhs, const weekday_indexed& __rhs) noexcept {
return month_weekday{month(__lhs), __rhs};
}
-_LIBCPP_HIDE_FROM_ABI inline constexpr month_weekday
+[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr month_weekday
operator/(const weekday_indexed& __lhs, const month& __rhs) noexcept {
return month_weekday{__rhs, __lhs};
}
-_LIBCPP_HIDE_FROM_ABI inline constexpr month_weekday operator/(const weekday_indexed& __lhs, int __rhs) noexcept {
+[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr month_weekday
+operator/(const weekday_indexed& __lhs, int __rhs) noexcept {
return month_weekday{month(__rhs), __lhs};
}
@@ -71,9 +75,11 @@ class month_weekday_last {
_LIBCPP_HIDE_FROM_ABI constexpr month_weekday_last(const chrono::month& __mval,
const chrono::weekday_last& __wdlval) noexcept
: __m_{__mval}, __wdl_{__wdlval} {}
- _LIBCPP_HIDE_FROM_ABI inline constexpr chrono::month month() const noexcept { return __m_; }
- _LIBCPP_HIDE_FROM_ABI inline constexpr chrono::weekday_last weekday_last() const noexcept { return __wdl_; }
- _LIBCPP_HIDE_FROM_ABI inline constexpr bool ok() const noexcept { return __m_.ok() && __wdl_.ok(); }
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr chrono::month month() const noexcept { return __m_; }
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr chrono::weekday_last weekday_last() const noexcept {
+ return __wdl_;
+ }
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr bool ok() const noexcept { return __m_.ok() && __wdl_.ok(); }
};
_LIBCPP_HIDE_FROM_ABI inline constexpr bool
@@ -81,21 +87,23 @@ operator==(const month_weekday_last& __lhs, const month_weekday_last& __rhs) noe
return __lhs.month() == __rhs.month() && __lhs.weekday_last() == __rhs.weekday_last();
}
-_LIBCPP_HIDE_FROM_ABI inline constexpr month_weekday_last
+[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr month_weekday_last
operator/(const month& __lhs, const weekday_last& __rhs) noexcept {
return month_weekday_last{__lhs, __rhs};
}
-_LIBCPP_HIDE_FROM_ABI inline constexpr month_weekday_last operator/(int __lhs, const weekday_last& __rhs) noexcept {
+[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr month_weekday_last
+operator/(int __lhs, const weekday_last& __rhs) noexcept {
return month_weekday_last{month(__lhs), __rhs};
}
-_LIBCPP_HIDE_FROM_ABI inline constexpr month_weekday_last
+[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr month_weekday_last
operator/(const weekday_last& __lhs, const month& __rhs) noexcept {
return month_weekday_last{__rhs, __lhs};
}
-_LIBCPP_HIDE_FROM_ABI inline constexpr month_weekday_last operator/(const weekday_last& __lhs, int __rhs) noexcept {
+[[nodiscard]] _LIBCPP_HIDE_FROM_ABI inline constexpr month_weekday_last
+operator/(const weekday_last& __lhs, int __rhs) noexcept {
return month_weekday_last{month(__rhs), __lhs};
}
} // namespace chrono
@@ -104,7 +112,7 @@ _LIBCPP_HIDE_FROM_ABI inline constexpr month_weekday_last operator/(const weekda
template <>
struct hash<chrono::month_weekday> {
- _LIBCPP_HIDE_FROM_ABI static size_t operator()(const chrono::month_weekday& __mw) noexcept {
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static size_t operator()(const chrono::month_weekday& __mw) noexcept {
return std::__hash_combine(
hash<chrono::month>{}(__mw.month()), hash<chrono::weekday_indexed>{}(__mw.weekday_indexed()));
}
@@ -112,7 +120,7 @@ struct hash<chrono::month_weekday> {
template <>
struct hash<chrono::month_weekday_last> {
- _LIBCPP_HIDE_FROM_ABI static size_t operator()(const chrono::month_weekday_last& __mwl) noexcept {
+ [[nodiscard]] _LIBCPP_HIDE_FROM_ABI static size_t operator()(const chrono::month_weekday_last& __mwl) noexcept {
return std::__hash_combine(
hash<chrono::month>{}(__mwl.month()), hash<chrono::weekday_last>{}(__mwl.weekday_last()));
}
diff --git a/libcxx/test/libcxx/time/nodiscard.verify.cpp b/libcxx/test/libcxx/time/nodiscard.verify.cpp
index 94be9679bde7f..2fdb9d0e8aa88 100644
--- a/libcxx/test/libcxx/time/nodiscard.verify.cpp
+++ b/libcxx/test/libcxx/time/nodiscard.verify.cpp
@@ -107,103 +107,171 @@ void test(std::chrono::time_zone tz, std::chrono::time_zone_link link, std::chro
}
#endif // TEST_STD_VER >= 20
-void test() {
- { // [time.duration]
- // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::microseconds(2));
+void test_duration() { // [time.duration]
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::microseconds(2));
- // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- std::chrono::duration_values<int>::zero();
- // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- std::chrono::duration_values<int>::max();
- // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- std::chrono::duration_values<int>::min();
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ std::chrono::duration_values<int>::zero();
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ std::chrono::duration_values<int>::max();
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ std::chrono::duration_values<int>::min();
- std::chrono::duration<int, std::ratio<1, 30> > dr;
+ std::chrono::duration<int, std::ratio<1, 30> > dr;
#if TEST_STD_VER >= 17
- // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- std::chrono::floor<std::chrono::seconds>(dr);
- // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- std::chrono::ceil<std::chrono::seconds>(dr);
- // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- std::chrono::round<std::chrono::seconds>(dr);
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ std::chrono::floor<std::chrono::seconds>(dr);
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ std::chrono::ceil<std::chrono::seconds>(dr);
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ std::chrono::round<std::chrono::seconds>(dr);
#endif
- // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- dr.count();
-
- // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- +dr;
- // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- -dr;
-
- // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- std::chrono::duration<int, std::ratio<1, 30> >::zero();
- // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- std::chrono::duration<int, std::ratio<1, 30> >::max();
- // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- std::chrono::duration<int, std::ratio<1, 30> >::min();
-
- // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- dr + dr;
- // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- dr - dr;
- // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- dr * 94;
- // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- 94 * dr;
- // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- dr / 82;
- // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- dr / dr;
- // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- dr % 47;
- // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- dr % dr;
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ dr.count();
+
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ +dr;
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ -dr;
+
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ std::chrono::duration<int, std::ratio<1, 30> >::zero();
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ std::chrono::duration<int, std::ratio<1, 30> >::max();
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ std::chrono::duration<int, std::ratio<1, 30> >::min();
+
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ dr + dr;
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ dr - dr;
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ dr * 94;
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ 94 * dr;
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ dr / 82;
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ dr / dr;
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ dr % 47;
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ dr % dr;
#if TEST_STD_VER >= 17
- using namespace std::chrono_literals;
+ using namespace std::chrono_literals;
+
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ 94h;
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ 82.5h;
+
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ 94min;
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ 82.5min;
+
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ 94s;
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ 82.5s;
+
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ 94ms;
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ 82.5ms;
+
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ 94us;
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ 82.5us;
+
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ 94ns;
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ 82.5ns;
+#endif // TEST_STD_VER >= 14
- // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- 94h;
- // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- 82.5h;
+#if TEST_STD_VER >= 26
+ std::hash<std::chrono::duration<int, std::ratio<1, 30>>> hash;
- // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- 94min;
- // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- 82.5min;
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ hash(dr);
+#endif
+}
- // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- 94s;
- // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- 82.5s;
+#if TEST_STD_VER >= 20
+void test_hh_mm_ss() { // [time.hms]
+ const std::chrono::hh_mm_ss<std::chrono::seconds> hms;
+
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ hms.is_negative();
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ hms.hours();
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ hms.minutes();
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ hms.seconds();
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ hms.subseconds();
+
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ hms.to_duration();
+
+ using namespace std::chrono_literals;
+
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ std::chrono::is_am(1h);
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ std::chrono::is_pm(1h);
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ std::chrono::make12(1h);
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ std::chrono::make24(1h, false);
+}
+#endif
- // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- 94ms;
- // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- 82.5ms;
+void test_time_point() { // [time.point]
+ std::chrono::time_point<std::chrono::system_clock> tp;
+ std::chrono::duration<double, std::ratio<1, 30> > dr;
- // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- 94us;
- // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- 82.5us;
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ tp.time_since_epoch();
- // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- 94ns;
- // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- 82.5ns;
-#endif // TEST_STD_VER >= 14
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ tp.min();
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ tp.max();
-#if TEST_STD_VER >= 26
- std::hash<std::chrono::duration<int, std::ratio<1, 30>>> hash;
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ std::chrono::time_point_cast<std::chrono::seconds>(tp);
- // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- hash(dr);
+#if TEST_STD_VER >= 17
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ std::chrono::floor<std::chrono::seconds>(tp);
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ std::chrono::ceil<std::chrono::seconds>(tp);
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ std::chrono::round<std::chrono::seconds>(tp);
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ std::chrono::abs(dr);
#endif
- }
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ tp + dr;
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ dr + tp;
+
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ tp - dr;
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ tp - tp;
+}
+
+void test_clocks() {
#if TEST_STD_VER >= 20
{ // [time.clock.file]
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
@@ -274,56 +342,108 @@ void test() {
}
#endif
- { // [time.point]
- std::chrono::time_point<std::chrono::system_clock> tp;
- std::chrono::duration<double, std::ratio<1, 30> > dr;
+#if TEST_STD_VER >= 20
+ { // [time.clock.utc]
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ std::chrono::utc_clock::now();
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- tp.time_since_epoch();
+ std::chrono::utc_clock::to_sys(std::chrono::utc_seconds{});
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- tp.min();
+ std::chrono::utc_clock::from_sys(std::chrono::sys_seconds{});
+
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- tp.max();
+ std::chrono::get_leap_second_info(std::chrono::utc_seconds{});
+ }
+#endif // TEST_STD_VER >= 20
+}
+
+#if TEST_STD_VER >= 20
+void test_calendar() { // [time.cal]
+ { // [time.cal.day]
+ std::chrono::day day;
+ std::chrono::days days;
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- std::chrono::time_point_cast<std::chrono::seconds>(tp);
+ day.ok();
-#if TEST_STD_VER >= 17
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- std::chrono::floor<std::chrono::seconds>(tp);
+ day + days;
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- std::chrono::ceil<std::chrono::seconds>(tp);
+ days + day;
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- std::chrono::round<std::chrono::seconds>(tp);
+ day - days;
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- std::chrono::abs(dr);
-#endif
+ day - day;
+
+ std::hash<std::chrono::day> hash;
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- tp + dr;
- // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- dr + tp;
+ hash(day);
+ }
+
+ {
+ using namespace std::chrono_literals;
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- tp - dr;
+ 94d;
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- tp - tp;
+ 82y;
}
-#if TEST_STD_VER >= 20
- { // [time.clock.utc]
+ { // [time.cal.mwd]
+ std::chrono::month month;
+ std::chrono::weekday_indexed iday;
+ std::chrono::month_weekday wday{month, iday};
+
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- std::chrono::utc_clock::now();
+ wday.month();
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ wday.weekday_indexed();
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ wday.ok();
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- std::chrono::utc_clock::to_sys(std::chrono::utc_seconds{});
+ month / iday;
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ 94 / iday;
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ iday / month;
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ iday / 82;
+
+ std::hash<std::chrono::month_weekday> hash;
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- std::chrono::utc_clock::from_sys(std::chrono::sys_seconds{});
+ hash(wday);
+ }
+
+ { // [time.cal.mwdlast]
+ std::chrono::month month;
+ std::chrono::weekday_last lday{std::chrono::Sunday};
+ std::chrono::month_weekday_last wday{month, lday};
// expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
- std::chrono::get_leap_second_info(std::chrono::utc_seconds{});
+ wday.month();
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ wday.weekday_last();
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ wday.ok();
+
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ month / lday;
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ 94 / lday;
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ lday / month;
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ lday / 82;
+
+ std::hash<std::chrono::month_weekday_last> hash;
+
+ // expected-warning at +1 {{ignoring return value of function declared with 'nodiscard' attribute}}
+ hash(wday);
}
-#endif // TEST_STD_VER >= 20
}
+#endif
More information about the libcxx-commits
mailing list