//===----------------------------------------------------------------------===// // // 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 pointer allocate(allocator_type& a, 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() {} TEST_CONSTEXPR_CXX20 value_type* allocate(std::size_t n) { assert(n == 10); return &storage; } value_type storage; }; TEST_CONSTEXPR_CXX20 bool test() { { A a; assert(std::allocator_traits >::allocate(a, 10) == &a.storage); } { typedef A Alloc; Alloc a; assert(std::allocator_traits::allocate(a, 10) == &a.storage); } return true; } int main(int, char**) { test(); #if TEST_STD_VER > 17 static_assert(test()); #endif return 0; }