From 8a394b19c149cab50534b04c5e21d42bc2217a7d Mon Sep 17 00:00:00 2001 From: Abseil Team Date: Fri, 17 May 2019 10:51:37 -0700 Subject: Export of internal Abseil changes. -- cae9f0c87632d690ec3f471e181be247fe4fb025 by Abseil Team : Run IWYU on some headers. PiperOrigin-RevId: 248749194 -- f57dcac97cacbe31769a8646020a99b6686987dc by Samuel Benzaquen : Accept vector::reference in StrFormat and friends. The proxy types might overload `operator&`. Use std::addressof instead. PiperOrigin-RevId: 248619661 GitOrigin-RevId: cae9f0c87632d690ec3f471e181be247fe4fb025 Change-Id: Iacf5d46a59d1d5f1fa1fd4a1e0d0de8c6cbedb3e --- absl/base/call_once.h | 2 ++ absl/base/casts.h | 1 + absl/base/internal/low_level_alloc.h | 1 + absl/base/internal/spinlock.h | 1 + absl/base/macros.h | 1 + absl/strings/internal/str_format/arg.h | 3 ++- absl/strings/internal/str_format/convert_test.cc | 11 +++++++++++ 7 files changed, 19 insertions(+), 1 deletion(-) diff --git a/absl/base/call_once.h b/absl/base/call_once.h index 8c4f297..e7fc230 100644 --- a/absl/base/call_once.h +++ b/absl/base/call_once.h @@ -29,6 +29,7 @@ #include #include #include +#include #include "absl/base/internal/invoke.h" #include "absl/base/internal/low_level_scheduling.h" @@ -36,6 +37,7 @@ #include "absl/base/internal/scheduling_mode.h" #include "absl/base/internal/spinlock_wait.h" #include "absl/base/macros.h" +#include "absl/base/optimization.h" #include "absl/base/port.h" namespace absl { diff --git a/absl/base/casts.h b/absl/base/casts.h index a381c42..aba0178 100644 --- a/absl/base/casts.h +++ b/absl/base/casts.h @@ -27,6 +27,7 @@ #include #include #include +#include #include "absl/base/internal/identity.h" #include "absl/base/macros.h" diff --git a/absl/base/internal/low_level_alloc.h b/absl/base/internal/low_level_alloc.h index b35673d..c98cdb3 100644 --- a/absl/base/internal/low_level_alloc.h +++ b/absl/base/internal/low_level_alloc.h @@ -25,6 +25,7 @@ // IWYU pragma: private, include "base/low_level_alloc.h" #include + #include #include "absl/base/attributes.h" diff --git a/absl/base/internal/spinlock.h b/absl/base/internal/spinlock.h index 940f56a..a55aa20 100644 --- a/absl/base/internal/spinlock.h +++ b/absl/base/internal/spinlock.h @@ -32,6 +32,7 @@ #include #include + #include #include "absl/base/attributes.h" diff --git a/absl/base/macros.h b/absl/base/macros.h index ca62079..606a90a 100644 --- a/absl/base/macros.h +++ b/absl/base/macros.h @@ -31,6 +31,7 @@ #include #include +#include "absl/base/optimization.h" #include "absl/base/port.h" // ABSL_ARRAYSIZE() diff --git a/absl/strings/internal/str_format/arg.h b/absl/strings/internal/str_format/arg.h index 4d48af0..5cb3a14 100644 --- a/absl/strings/internal/str_format/arg.h +++ b/absl/strings/internal/str_format/arg.h @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -292,7 +293,7 @@ class FormatArgImpl { struct Manager { static Data SetValue(const T& value) { Data data; - data.ptr = &value; + data.ptr = std::addressof(value); return data; } diff --git a/absl/strings/internal/str_format/convert_test.cc b/absl/strings/internal/str_format/convert_test.cc index 3b4d4b0..814ccf4 100644 --- a/absl/strings/internal/str_format/convert_test.cc +++ b/absl/strings/internal/str_format/convert_test.cc @@ -367,6 +367,17 @@ typedef ::testing::Types< INSTANTIATE_TYPED_TEST_CASE_P(TypedFormatConvertTestWithAllIntTypes, TypedFormatConvertTest, AllIntTypes); +TEST_F(FormatConvertTest, VectorBool) { + // Make sure vector's values behave as bools. + std::vector v = {true, false}; + const std::vector cv = {true, false}; + EXPECT_EQ("1,0,1,0", + FormatPack(UntypedFormatSpecImpl("%d,%d,%d,%d"), + absl::Span( + {FormatArgImpl(v[0]), FormatArgImpl(v[1]), + FormatArgImpl(cv[0]), FormatArgImpl(cv[1])}))); +} + TEST_F(FormatConvertTest, Uint128) { absl::uint128 v = static_cast(0x1234567890abcdef) * 1979; absl::uint128 max = absl::Uint128Max(); -- cgit v1.2.3