]> git.ipfire.org Git - thirdparty/gcc.git/blob - libstdc++-v3/testsuite/23_containers/vector/capacity/resize/strong_guarantee.cc
Update copyright years.
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / 23_containers / vector / capacity / resize / strong_guarantee.cc
1 // Copyright (C) 2018-2023 Free Software Foundation, Inc.
2 //
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)
7 // any later version.
8
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.
13
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/>.
17
18 #include <vector>
19 #include <testsuite_hooks.h>
20
21 struct X
22 {
23 X() : data(1)
24 {
25 if (fail)
26 throw 1;
27 }
28
29 static bool fail;
30
31 std::vector<int> data;
32 };
33
34 bool X::fail = false;
35
36 void
37 test01()
38 {
39 std::vector<X> v(2);
40 X* const addr = &v[0];
41 bool caught = false;
42 try {
43 X::fail = true;
44 v.resize(v.capacity() + 1); // force reallocation
45 } catch (int) {
46 caught = true;
47 }
48 VERIFY( caught );
49 VERIFY( v.size() == 2 );
50 VERIFY( &v[0] == addr );
51 // PR libstdc++/83982
52 VERIFY( ! v[0].data.empty() );
53 VERIFY( ! v[1].data.empty() );
54 }
55
56 int
57 main()
58 {
59 test01();
60 }