aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2023-12-14 15:26:42 +0000
committerJonathan Wakely <jwakely@redhat.com>2023-12-14 22:04:42 +0000
commit2ef5200a6fb7311074904a1b4bf7ce750618a068 (patch)
tree0467a2810a7a45748cad8ac3d67c940542c4d477
parentae034b9106fbdd855ec22ce221bb61a1a9a532c3 (diff)
downloadgcc-2ef5200a6fb7311074904a1b4bf7ce750618a068.zip
gcc-2ef5200a6fb7311074904a1b4bf7ce750618a068.tar.gz
gcc-2ef5200a6fb7311074904a1b4bf7ce750618a068.tar.bz2
libstdc++: Fix %S format of duration with floating-point rep
I got the order of arguments to std::format_to wrong. It was in a discarded statement, for a case which wasn't being tested. libstdc++-v3/ChangeLog: * include/bits/chrono_io.h (__formatter_chrono::_M_S): Fix order of arguments to std::format_to. * testsuite/20_util/duration/io.cc: Test subsecond duration with floating-point rep.
-rw-r--r--libstdc++-v3/include/bits/chrono_io.h2
-rw-r--r--libstdc++-v3/testsuite/20_util/duration/io.cc4
2 files changed, 5 insertions, 1 deletions
diff --git a/libstdc++-v3/include/bits/chrono_io.h b/libstdc++-v3/include/bits/chrono_io.h
index bcd76e4..c304516 100644
--- a/libstdc++-v3/include/bits/chrono_io.h
+++ b/libstdc++-v3/include/bits/chrono_io.h
@@ -1137,7 +1137,7 @@ namespace __format
using rep = typename decltype(__ss)::rep;
if constexpr (is_floating_point_v<rep>)
{
- __out = std::format_to(__loc, std::move(__out),
+ __out = std::format_to(std::move(__out), __loc,
_GLIBCXX_WIDEN("{:.{}Lg}"),
__ss.count(),
__hms.fractional_width);
diff --git a/libstdc++-v3/testsuite/20_util/duration/io.cc b/libstdc++-v3/testsuite/20_util/duration/io.cc
index d2b9de7..0582c007 100644
--- a/libstdc++-v3/testsuite/20_util/duration/io.cc
+++ b/libstdc++-v3/testsuite/20_util/duration/io.cc
@@ -95,6 +95,10 @@ test_format()
"required by the chrono-specs") != s.npos);
}
}
+
+ std::chrono::duration<float, std::milli> d{0.5};
+ s = std::format("{}", d);
+ VERIFY( s == "0.5ms" );
}
void