//===----------------------------------------------------------------------===// // // 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 // //===----------------------------------------------------------------------===// // // template // struct allocator_traits // { // static constexpr void deallocate(allocator_type& a, pointer p, size_type n); // ... // }; #include #include #include #include "test_macros.h" #include "incomplete_type_helper.h" template struct A { typedef T value_type; TEST_CONSTEXPR_CXX20 A(int& called) : called_(called) {} TEST_CONSTEXPR_CXX20 void deallocate(value_type* p, std::size_t n) { assert(p == &storage); assert(n == 10); ++called_; } int& called_; value_type storage; }; TEST_CONSTEXPR_CXX20 bool test() { { int called = 0; A a(called); std::allocator_traits >::deallocate(a, &a.storage, 10); assert(called == 1); } { int called = 0; typedef A Alloc; Alloc a(called); std::allocator_traits::deallocate(a, &a.storage, 10); assert(called == 1); } return true; } int main(int, char**) { test(); #if TEST_STD_VER > 17 static_assert(test()); #endif return 0; }