//===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // REQUIRES: objective-c++ // Simple test to check that type traits support Objective-C types. #include #include "test_macros.h" @interface I; @end // add_pointer static_assert(std::is_same::type, id*>::value, ""); static_assert(std::is_same::type, I*>::value, ""); // add_lvalue_reference static_assert(std::is_same::type, id&>::value, ""); static_assert(std::is_same::type, I&>::value, ""); // add_rvalue_reference static_assert(std::is_same::type, id&&>::value, ""); static_assert(std::is_same::type, I&&>::value, ""); // decay static_assert(std::is_same::type, id>::value, ""); static_assert(std::is_same::type, I>::value, ""); static_assert(std::is_same::type, id*>::value, ""); // __libcpp_is_referenceable LIBCPP_STATIC_ASSERT(std::__libcpp_is_referenceable::value, ""); LIBCPP_STATIC_ASSERT(std::__libcpp_is_referenceable::value, ""); LIBCPP_STATIC_ASSERT(std::__libcpp_is_referenceable::value, ""); LIBCPP_STATIC_ASSERT(std::__libcpp_is_referenceable::value, ""); LIBCPP_STATIC_ASSERT(std::__libcpp_is_referenceable::value, ""); LIBCPP_STATIC_ASSERT(std::__libcpp_is_referenceable::value, ""); LIBCPP_STATIC_ASSERT(std::__libcpp_is_referenceable::value, ""); LIBCPP_STATIC_ASSERT(std::__libcpp_is_referenceable::value, ""); // remove_all_extents static_assert(std::is_same::type, id>::value, ""); static_assert(std::is_same::type, id>::value, ""); static_assert(std::is_same::type, id>::value, ""); static_assert(std::is_same::type, I>::value, ""); // remove_const static_assert(std::is_same::type, id>::value, ""); static_assert(std::is_same::type, id>::value, ""); static_assert(std::is_same::type, I>::value, ""); static_assert(std::is_same::type, I>::value, ""); // remove_cv static_assert(std::is_same::type, id>::value, ""); static_assert(std::is_same::type, id>::value, ""); static_assert(std::is_same::type, I>::value, ""); static_assert(std::is_same::type, I>::value, ""); #if TEST_STD_VER >= 20 // remove_cvref static_assert(std::is_same::type, id>::value, ""); static_assert(std::is_same::type, id>::value, ""); static_assert(std::is_same::type, id>::value, ""); static_assert(std::is_same::type, I>::value, ""); static_assert(std::is_same::type, I>::value, ""); static_assert(std::is_same::type, I>::value, ""); #endif // remove_extent static_assert(std::is_same::type, id>::value, ""); static_assert(std::is_same::type, id>::value, ""); static_assert(std::is_same::type, I>::value, ""); // remove_pointer static_assert(!std::is_same::type, id>::value, ""); // The result of removing and re-adding pointer to `id` should be still `id`. static_assert(std::is_same::type*, id>::value, ""); static_assert(std::is_same::type>::type, id>::value, ""); static_assert(std::is_same::type>::type, id>::value, ""); // remove_reference static_assert(std::is_same::type, id>::value, ""); static_assert(std::is_same::type, id>::value, ""); static_assert(std::is_same::type, const id>::value, ""); static_assert(std::is_same::type, id>::value, ""); static_assert(std::is_same::type, const id>::value, ""); static_assert(std::is_same::type, I>::value, ""); static_assert(std::is_same::type, I>::value, ""); static_assert(std::is_same::type, const I>::value, ""); static_assert(std::is_same::type, I>::value, ""); static_assert(std::is_same::type, const I>::value, ""); // remove_volatile static_assert(std::is_same::type, id>::value, ""); static_assert(std::is_same::type, id>::value, ""); static_assert(std::is_same::type, I>::value, ""); static_assert(std::is_same::type, I>::value, ""); int main(int, char**) { return 0; }