summaryrefslogtreecommitdiff
path: root/absl/functional
diff options
context:
space:
mode:
authorGravatar Abseil Team <absl-team@google.com>2020-06-10 15:35:34 -0700
committerGravatar vslashg <gfalcon@google.com>2020-06-10 18:59:53 -0400
commite7ebf9803746b9a115d96164bdf5e915be8f223b (patch)
tree2ccafec5290edd068ee47751efb56f2eb51134b2 /absl/functional
parent2eba343b51e0923cd3fb919a6abd6120590fc059 (diff)
Export of internal Abseil changes
-- 44b312da54263fc7491b5f1e115e49e0c1e2dc10 by Greg Falcon <gfalcon@google.com>: Import of CCTZ from GitHub. PiperOrigin-RevId: 315782632 -- 27618a3b195f75384ba44e9712ae0b0b7d85937e by Greg Falcon <gfalcon@google.com>: Update Abseil's internal Invoke() implementation to follow C++17 semantics. Starting in C++17, when invoke'ing a pointer-to-member, if the object representing the class is a reference_wrapper, that wrapper is unpacked. Because we implement a number of functional APIs that closely match C++ standard proposals, it is better if we follow the standard's notion of what "invoking" means. This also makes `absl::base_internal::Invoke()` match `std::invoke()` in C++17. I intend to make this an alias in a follow-up CL. PiperOrigin-RevId: 315750659 -- 059519ea402cd55b1b716403bb680504c6ff5808 by Xiaoyi Zhang <zhangxy@google.com>: Internal change PiperOrigin-RevId: 315597064 -- 5e2042c8520576b2508e2bfb1020a97c7db591da by Titus Winters <titus@google.com>: Update notes on the delta between absl::Span vs. std::span. PiperOrigin-RevId: 315518942 -- 9d3875527b93124f5de5d6a1d575c42199fbf323 by Abseil Team <absl-team@google.com>: Internal cleanup PiperOrigin-RevId: 315497633 GitOrigin-RevId: 44b312da54263fc7491b5f1e115e49e0c1e2dc10 Change-Id: I24573f317c8388bd693c0fdab395a7dd419b33b0
Diffstat (limited to 'absl/functional')
-rw-r--r--absl/functional/bind_front_test.cc19
1 files changed, 19 insertions, 0 deletions
diff --git a/absl/functional/bind_front_test.cc b/absl/functional/bind_front_test.cc
index 4801a81c..92b6e8e5 100644
--- a/absl/functional/bind_front_test.cc
+++ b/absl/functional/bind_front_test.cc
@@ -228,4 +228,23 @@ TEST(BindTest, Mangling) {
absl::bind_front(ManglingCall{}, 1, 3.3)("A");
}
+struct Adder {
+ int add(int v2) const { return v + v2; }
+ int v;
+};
+
+TEST(BindTest, InvokeSemantics) {
+ Struct s1 = {"value"};
+ auto f1 = absl::bind_front(&Struct::value);
+ EXPECT_EQ(f1(s1), "value");
+ EXPECT_EQ(f1(&s1), "value");
+ EXPECT_EQ(f1(std::ref(s1)), "value");
+
+ Adder add_100 = {100};
+ auto f2 = absl::bind_front(&Adder::add);
+ EXPECT_EQ(f2(add_100, 23), 123);
+ EXPECT_EQ(f2(&add_100, 45), 145);
+ EXPECT_EQ(f2(std::ref(add_100), 67), 167);
+}
+
} // namespace