//===----------------------------------------------------------------------===// // // 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 void deallocate(allocator_type& a, pointer p, size_type n); // ... // }; #include #include #include #include "test_macros.h" #include "incomplete_type_helper.h" int called = 0; template struct A { typedef T value_type; void deallocate(value_type* p, std::size_t n) { assert(p == reinterpret_cast(static_cast(0xDEADBEEF))); assert(n == 10); ++called; } }; int main(int, char**) { { A a; std::allocator_traits >::deallocate(a, reinterpret_cast(static_cast(0xDEADBEEF)), 10); assert(called == 1); } called = 0; { typedef IncompleteHolder* VT; typedef A Alloc; Alloc a; std::allocator_traits::deallocate(a, reinterpret_cast(static_cast(0xDEADBEEF)), 10); assert(called == 1); } return 0; }