1 // Copyright (C) 2017-2025 Free Software Foundation, Inc.
3 // This file is part of the GNU ISO C++ Library. This library is free
4 // software; you can redistribute it and/or modify it under the
5 // terms of the GNU General Public License as published by the
6 // Free Software Foundation; either version 3, or (at your option)
9 // This library is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 // GNU General Public License for more details.
14 // You should have received a copy of the GNU General Public License along
15 // with this library; see the file COPYING3. If not see
16 // <http://www.gnu.org/licenses/>.
18 // { dg-do run { target c++11 } }
23 #include <testsuite_allocator.h>
25 struct DereferencedInvalidPointer
{ };
27 // User-defined pointer type that throws if a null pointer is dereferenced.
29 struct Pointer
: __gnu_test::PointerBase
<Pointer
<T
>, T
>
31 using __gnu_test::PointerBase
<Pointer
<T
>, T
>::PointerBase
;
36 throw DereferencedInvalidPointer();
41 // Minimal allocator using Pointer<T>
46 typedef Pointer
<T
> pointer
;
50 Alloc(const Alloc
<U
>&) { }
52 pointer
allocate(std::size_t n
)
55 return pointer(std::allocator
<T
>().allocate(n
));
59 void deallocate(pointer p
, std::size_t n
)
62 std::allocator
<T
>().deallocate(p
.operator->(), n
);
67 bool operator==(Alloc
<T
>, Alloc
<T
>) { return true; }
70 bool operator!=(Alloc
<T
>, Alloc
<T
>) { return false; }
74 std::vector
<bool, Alloc
<bool>> v(0);
75 std::vector
<bool, Alloc
<bool>> w(v
);