Skip to content

Commit 8bd7178

Browse files
Abseil Teamcopybara-github
Abseil Team
authored andcommitted
Adds template specialization for nullptr assertion of absl::AnyInvocable types.
PiperOrigin-RevId: 526644558 Change-Id: I050162c2c0d667c32f7e11f51201054cca52667d
1 parent 43e07a0 commit 8bd7178

File tree

4 files changed

+30
-0
lines changed

4 files changed

+30
-0
lines changed

absl/functional/BUILD.bazel

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ cc_library(
9292
copts = ABSL_DEFAULT_COPTS,
9393
linkopts = ABSL_DEFAULT_LINKOPTS,
9494
deps = [
95+
":any_invocable",
9596
"//absl/base:base_internal",
9697
"//absl/base:core_headers",
9798
"//absl/meta:type_traits",
@@ -104,6 +105,7 @@ cc_test(
104105
srcs = ["function_ref_test.cc"],
105106
copts = ABSL_TEST_COPTS,
106107
deps = [
108+
":any_invocable",
107109
":function_ref",
108110
"//absl/container:test_instance_tracker",
109111
"//absl/memory",

absl/functional/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ absl_cc_library(
9090
DEPS
9191
absl::base_internal
9292
absl::core_headers
93+
absl::any_invocable
9394
absl::meta
9495
PUBLIC
9596
)

absl/functional/function_ref_test.cc

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include "gmock/gmock.h"
2121
#include "gtest/gtest.h"
2222
#include "absl/container/internal/test_instance_tracker.h"
23+
#include "absl/functional/any_invocable.h"
2324
#include "absl/memory/memory.h"
2425

2526
namespace absl {
@@ -157,6 +158,25 @@ TEST(FunctionRef, NullMemberPtrAssertFails) {
157158
EXPECT_DEBUG_DEATH({ FunctionRef<int(const S& s)> ref(mem_ptr); }, "");
158159
}
159160

161+
TEST(FunctionRef, NullStdFunctionAssertPasses) {
162+
std::function<void()> function = []() {};
163+
FunctionRef<void()> ref(function);
164+
}
165+
166+
TEST(FunctionRef, NullStdFunctionAssertFails) {
167+
std::function<void()> function = nullptr;
168+
EXPECT_DEBUG_DEATH({ FunctionRef<void()> ref(function); }, "");
169+
}
170+
171+
TEST(FunctionRef, NullAnyInvocableAssertPasses) {
172+
AnyInvocable<void() const> invocable = []() {};
173+
FunctionRef<void()> ref(invocable);
174+
}
175+
TEST(FunctionRef, NullAnyInvocableAssertFails) {
176+
AnyInvocable<void() const> invocable = nullptr;
177+
EXPECT_DEBUG_DEATH({ FunctionRef<void()> ref(invocable); }, "");
178+
}
179+
160180
#endif // GTEST_HAS_DEATH_TEST
161181

162182
TEST(FunctionRef, CopiesAndMovesPerPassByValue) {

absl/functional/internal/function_ref.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include <type_traits>
2121

2222
#include "absl/base/internal/invoke.h"
23+
#include "absl/functional/any_invocable.h"
2324
#include "absl/meta/type_traits.h"
2425

2526
namespace absl {
@@ -90,6 +91,12 @@ void AssertNonNull(const std::function<Sig>& f) {
9091
(void)f;
9192
}
9293

94+
template <typename Sig>
95+
void AssertNonNull(const AnyInvocable<Sig>& f) {
96+
assert(f != nullptr);
97+
(void)f;
98+
}
99+
93100
template <typename F>
94101
void AssertNonNull(const F&) {}
95102

0 commit comments

Comments
 (0)