1 // Copyright (C) 2016-2021 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 } }
21 #include <testsuite_hooks.h>
23 template class std::allocator
<void>;
29 using alloc_type
= std::allocator
<void>;
31 std::allocator_traits
<alloc_type
>::construct(a
, &i
, 42);
33 std::allocator_traits
<alloc_type
>::destroy(a
, &i
);
36 // These properties are formally unspecified, but have always been true for
37 // the libstdc++ definition of allocator<void>.
39 std::is_trivially_default_constructible
<std::allocator
<void>>::value
,
40 "explicit specialization has trivial default constructor");
42 std::is_trivially_copy_constructible
<std::allocator
<void>>::value
,
43 "explicit specialization has trivial copy constructor");
45 std::is_trivially_move_constructible
<std::allocator
<void>>::value
,
46 "explicit specialization has trivial move constructor");
48 std::is_trivially_destructible
<std::allocator
<void>>::value
,
49 "explicit specialization has trivial destructor");
51 #if __cplusplus > 201703L
52 // C++20 removes the allocator<void> explicit specialization, so it can now be
53 // constructed using the converting constructor from other specializations.
54 static_assert( std::is_constructible_v
<std::allocator
<void>,
55 std::allocator
<int>> );