1 // Copyright (C) 2014-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 // User-defined pointer type that throws if a null pointer is dereferenced.
27 struct Pointer
: __gnu_test::PointerBase
<Pointer
<T
>, T
>
29 using __gnu_test::PointerBase
<Pointer
<T
>, T
>::PointerBase
;
34 throw "Dereferenced invalid pointer";
39 // Minimal allocator using Pointer<T>
44 typedef Pointer
<T
> pointer
;
48 Alloc(const Alloc
<U
>&) { }
50 pointer
allocate(std::size_t n
)
51 { return pointer(std::allocator
<T
>().allocate(n
)); }
53 void deallocate(pointer p
, std::size_t n
)
54 { std::allocator
<T
>().deallocate(p
.operator->(), n
); }
58 bool operator==(Alloc
<T
> l
, Alloc
<T
> r
) { return true; }
61 bool operator!=(Alloc
<T
> l
, Alloc
<T
> r
) { return false; }
65 std::vector
<int, Alloc
<int>> a
;