// Copyright 2023 The Abseil Authors. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #include "absl/base/nullability.h" #include <cassert> #include <memory> #include <utility> #include "gtest/gtest.h" #include "absl/base/attributes.h" namespace { Nonnull; NullabilityUnknown; Nullable; void funcWithNonnullArg(Nonnull<int*> /*arg*/) { … } template <typename T> void funcWithDeducedNonnullArg(Nonnull<T*> /*arg*/) { … } TEST(NonnullTest, NonnullArgument) { … } Nonnull<int*> funcWithNonnullReturn() { … } TEST(NonnullTest, NonnullReturn) { … } TEST(PassThroughTest, PassesThroughRawPointerToInt) { … } TEST(PassThroughTest, PassesThroughRawPointerToVoid) { … } TEST(PassThroughTest, PassesThroughUniquePointerToInt) { … } TEST(PassThroughTest, PassesThroughSharedPointerToInt) { … } TEST(PassThroughTest, PassesThroughSharedPointerToVoid) { … } TEST(PassThroughTest, PassesThroughPointerToMemberObject) { … } TEST(PassThroughTest, PassesThroughPointerToMemberFunction) { … } } // namespace // Nullable ADL lookup test namespace util { // Helper for NullableAdlTest. Returns true, denoting that argument-dependent // lookup found this implementation of DidAdlWin. Must be in namespace // util itself, not a nested anonymous namespace. template <typename T> bool DidAdlWin(T*) { … } // Because this type is defined in namespace util, an unqualified call to // DidAdlWin with a pointer to MakeAdlWin will find the above implementation. struct MakeAdlWin { … }; } // namespace util namespace { // Returns false, denoting that ADL did not inspect namespace util. If it // had, the better match (T*) above would have won out over the (...) here. bool DidAdlWin(...) { … } TEST(NullableAdlTest, NullableAddsNothingToArgumentDependentLookup) { … } } // namespace