[libcxx-commits] [libcxx] [libc++][NFC] Simplify basic_ostream by combining operator<<(Arithmetic) (PR #121011)
A. Jiang via libcxx-commits
libcxx-commits at lists.llvm.org
Sat Dec 28 17:55:23 PST 2024
================
@@ -88,6 +88,55 @@ class _LIBCPP_TEMPLATE_VIS basic_ostream : virtual public basic_ios<_CharT, _Tra
return *this;
}
+ template <class _Tp>
+ _LIBCPP_HIDE_FROM_ABI basic_ostream& __put_num(_Tp __value) {
+# if _LIBCPP_HAS_EXCEPTIONS
+ try {
+# endif // _LIBCPP_HAS_EXCEPTIONS
+ sentry __s(*this);
+ if (__s) {
+ using _Fp = num_put<char_type, ostreambuf_iterator<char_type, traits_type> >;
+ const _Fp& __facet = std::use_facet<_Fp>(this->getloc());
+ if (__facet.put(*this, *this, this->fill(), __value).failed())
+ this->setstate(ios_base::badbit | ios_base::failbit);
+ }
+# if _LIBCPP_HAS_EXCEPTIONS
+ } catch (...) {
+ this->__set_badbit_and_consider_rethrow();
+ }
+# endif // _LIBCPP_HAS_EXCEPTIONS
+ return *this;
+ }
+
+ template <class _Tp>
+ _LIBCPP_HIDE_FROM_ABI basic_ostream& __put_num_integer_promote(_Tp __value) {
+# if _LIBCPP_HAS_EXCEPTIONS
+ try {
+# endif // _LIBCPP_HAS_EXCEPTIONS
+ sentry __s(*this);
+ if (__s) {
+ ios_base::fmtflags __flags = ios_base::flags() & ios_base::basefield;
+
+ using _Fp = num_put<char_type, ostreambuf_iterator<char_type, traits_type> >;
+ const _Fp& __facet = std::use_facet<_Fp>(this->getloc());
+ if (__facet
+ .put(*this,
+ *this,
+ this->fill(),
+ __flags == ios_base::oct || __flags == ios_base::hex
+ ? static_cast<__copy_unsigned_t<_Tp, long> >(std::__to_unsigned_like(__value))
+ : static_cast<__copy_unsigned_t<_Tp, long> >(__value))
+ .failed())
----------------
frederick-vs-ja wrote:
The formatting result looks weird, but this is pre-existing. Perhaps it would be better to extract a variable here (possibly in a following-up PR).
https://github.com/llvm/llvm-project/pull/121011
More information about the libcxx-commits
mailing list