From 4f3edeb1b4cc3d6e1d26eff6706fd3006961b9ed Mon Sep 17 00:00:00 2001 From: Abseil Team Date: Fri, 17 Nov 2017 07:42:56 -0800 Subject: Changes imported from Abseil "staging" branch: - c910f1792eae8cfdabb93bc261bf26e72f9a6717 Fix uint128 streaming to work with std::ios::internal. by Alex Strelnikov GitOrigin-RevId: c910f1792eae8cfdabb93bc261bf26e72f9a6717 Change-Id: I8ccce2ce6ac91ef7ce16fa8870a718fdfb8fa9a6 --- absl/numeric/int128.cc | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'absl/numeric/int128.cc') diff --git a/absl/numeric/int128.cc b/absl/numeric/int128.cc index 7debf56a..5081def5 100644 --- a/absl/numeric/int128.cc +++ b/absl/numeric/int128.cc @@ -187,8 +187,14 @@ std::ostream& operator<<(std::ostream& o, const uint128& b) { // Add the requisite padding. std::streamsize width = o.width(0); if (static_cast(width) > rep.size()) { - if ((flags & std::ios::adjustfield) == std::ios::left) { + std::ios::fmtflags adjustfield = flags & std::ios::adjustfield; + if (adjustfield == std::ios::left) { rep.append(width - rep.size(), o.fill()); + } else if (adjustfield == std::ios::internal && + (flags & std::ios::showbase) && + (flags & std::ios::basefield) != std::ios::dec) { + size_t base_size = (flags & std::ios::basefield) == std::ios::hex ? 2 : 1; + rep.insert(base_size, width - rep.size(), o.fill()); } else { rep.insert(0, width - rep.size(), o.fill()); } -- cgit v1.2.3