#if __cplusplus >= 202002L
#include <sstream> // ostringstream
-#include <iomanip> // setw, setfill
#include <format>
#include <charconv> // from_chars
#include <stdexcept> // __sso_string
inline basic_ostream<_CharT, _Traits>&
operator<<(basic_ostream<_CharT, _Traits>& __os,
const local_time<_Duration>& __lt)
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 4257. Stream insertion for chrono::local_time should be constrained
+ requires requires(const sys_time<_Duration>& __st) { __os << __st; }
{
__os << sys_time<_Duration>{__lt.time_since_epoch()};
return __os;
VERIFY( tp.time_since_epoch() == 0s );
}
+// LWG 4257. Stream insertion for chrono::local_time should be constrained
+template<typename T>
+concept ostream_insertable = requires (std::ostream& o, const T& t) { o << t; };
+using D = std::chrono::duration<double>;
+static_assert( ostream_insertable<std::chrono::local_days> );
+static_assert( ostream_insertable<std::chrono::local_seconds> );
+static_assert( ! ostream_insertable<std::chrono::local_time<D>> );
+
int main()
{
test_ostream();