Commit 8bd7178b by Abseil Team Committed by Copybara-Service

Adds template specialization for nullptr assertion of absl::AnyInvocable types.

PiperOrigin-RevId: 526644558
Change-Id: I050162c2c0d667c32f7e11f51201054cca52667d
parent 43e07a0e
...@@ -92,6 +92,7 @@ cc_library( ...@@ -92,6 +92,7 @@ cc_library(
copts = ABSL_DEFAULT_COPTS, copts = ABSL_DEFAULT_COPTS,
linkopts = ABSL_DEFAULT_LINKOPTS, linkopts = ABSL_DEFAULT_LINKOPTS,
deps = [ deps = [
":any_invocable",
"//absl/base:base_internal", "//absl/base:base_internal",
"//absl/base:core_headers", "//absl/base:core_headers",
"//absl/meta:type_traits", "//absl/meta:type_traits",
...@@ -104,6 +105,7 @@ cc_test( ...@@ -104,6 +105,7 @@ cc_test(
srcs = ["function_ref_test.cc"], srcs = ["function_ref_test.cc"],
copts = ABSL_TEST_COPTS, copts = ABSL_TEST_COPTS,
deps = [ deps = [
":any_invocable",
":function_ref", ":function_ref",
"//absl/container:test_instance_tracker", "//absl/container:test_instance_tracker",
"//absl/memory", "//absl/memory",
......
...@@ -90,6 +90,7 @@ absl_cc_library( ...@@ -90,6 +90,7 @@ absl_cc_library(
DEPS DEPS
absl::base_internal absl::base_internal
absl::core_headers absl::core_headers
absl::any_invocable
absl::meta absl::meta
PUBLIC PUBLIC
) )
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include "gmock/gmock.h" #include "gmock/gmock.h"
#include "gtest/gtest.h" #include "gtest/gtest.h"
#include "absl/container/internal/test_instance_tracker.h" #include "absl/container/internal/test_instance_tracker.h"
#include "absl/functional/any_invocable.h"
#include "absl/memory/memory.h" #include "absl/memory/memory.h"
namespace absl { namespace absl {
...@@ -157,6 +158,25 @@ TEST(FunctionRef, NullMemberPtrAssertFails) { ...@@ -157,6 +158,25 @@ TEST(FunctionRef, NullMemberPtrAssertFails) {
EXPECT_DEBUG_DEATH({ FunctionRef<int(const S& s)> ref(mem_ptr); }, ""); EXPECT_DEBUG_DEATH({ FunctionRef<int(const S& s)> ref(mem_ptr); }, "");
} }
TEST(FunctionRef, NullStdFunctionAssertPasses) {
std::function<void()> function = []() {};
FunctionRef<void()> ref(function);
}
TEST(FunctionRef, NullStdFunctionAssertFails) {
std::function<void()> function = nullptr;
EXPECT_DEBUG_DEATH({ FunctionRef<void()> ref(function); }, "");
}
TEST(FunctionRef, NullAnyInvocableAssertPasses) {
AnyInvocable<void() const> invocable = []() {};
FunctionRef<void()> ref(invocable);
}
TEST(FunctionRef, NullAnyInvocableAssertFails) {
AnyInvocable<void() const> invocable = nullptr;
EXPECT_DEBUG_DEATH({ FunctionRef<void()> ref(invocable); }, "");
}
#endif // GTEST_HAS_DEATH_TEST #endif // GTEST_HAS_DEATH_TEST
TEST(FunctionRef, CopiesAndMovesPerPassByValue) { TEST(FunctionRef, CopiesAndMovesPerPassByValue) {
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include <type_traits> #include <type_traits>
#include "absl/base/internal/invoke.h" #include "absl/base/internal/invoke.h"
#include "absl/functional/any_invocable.h"
#include "absl/meta/type_traits.h" #include "absl/meta/type_traits.h"
namespace absl { namespace absl {
...@@ -90,6 +91,12 @@ void AssertNonNull(const std::function<Sig>& f) { ...@@ -90,6 +91,12 @@ void AssertNonNull(const std::function<Sig>& f) {
(void)f; (void)f;
} }
template <typename Sig>
void AssertNonNull(const AnyInvocable<Sig>& f) {
assert(f != nullptr);
(void)f;
}
template <typename F> template <typename F>
void AssertNonNull(const F&) {} void AssertNonNull(const F&) {}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment