]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
libstdc++: Reduce header dependencies from PSTL headers [PR92546]
authorJonathan Wakely <jwakely@redhat.com>
Thu, 17 Mar 2022 16:45:43 +0000 (16:45 +0000)
committerJonathan Wakely <jwakely@redhat.com>
Fri, 18 Mar 2022 10:16:36 +0000 (10:16 +0000)
This avoids including the whole of <functional> in <algorithm>, as the
<pstl/glue_algorithm_defs.h> header only actually needs std::pair.

This also avoids including <iterator> in <pstl/utils.h>, which only
needs <type_traits>, std::bad_alloc, and std::terminate (which can be
repalced with std::__terminate). This matters less, because
<pstl/utils.h> is only included by the <pstl/*_impl.h> headers and they
all use <iterator> anyway, and are only included by <execution>.

libstdc++-v3/ChangeLog:

PR libstdc++/92546
* include/pstl/glue_algorithm_defs.h: Replace <functional> with
<bits/stl_pair.h>.
* include/pstl/utils.h: Replace <iterator> with <type_traits>.
(__pstl::__internal::__except_handler): Use std::__terminate
instead of std::terminate.
* src/c++17/fs_path.cc: Include <array>.
* testsuite/25_algorithms/adjacent_find/constexpr.cc: Include
<functional>.
* testsuite/25_algorithms/binary_search/constexpr.cc: Likewise.
* testsuite/25_algorithms/clamp/constrained.cc: Likewise.
* testsuite/25_algorithms/equal/constrained.cc: Likewise.
* testsuite/25_algorithms/for_each/constrained.cc: Likewise.
* testsuite/25_algorithms/includes/constrained.cc: Likewise.
* testsuite/25_algorithms/is_heap/constexpr.cc: Likewise.
* testsuite/25_algorithms/is_heap_until/constexpr.cc: Likewise.
* testsuite/25_algorithms/is_permutation/constrained.cc: Include
<iterator>.
* testsuite/25_algorithms/is_sorted/constexpr.cc: Include
<functional>.
* testsuite/25_algorithms/is_sorted_until/constexpr.cc:
Likewise.
* testsuite/25_algorithms/lexicographical_compare/constexpr.cc:
Likewise.
* testsuite/25_algorithms/lexicographical_compare/constrained.cc:
Likewise.
* testsuite/25_algorithms/lexicographical_compare_three_way/1.cc:
Include <array>.
* testsuite/25_algorithms/lower_bound/constexpr.cc: Include
<functional>.
* testsuite/25_algorithms/max/constrained.cc: Likewise.
* testsuite/25_algorithms/max_element/constrained.cc: Likewise.
* testsuite/25_algorithms/min/constrained.cc: Likewise.
* testsuite/25_algorithms/min_element/constrained.cc: Likewise.
* testsuite/25_algorithms/minmax_element/constrained.cc:
Likewise.
* testsuite/25_algorithms/mismatch/constexpr.cc: Likewise.
* testsuite/25_algorithms/move/93872.cc: Likewise.
* testsuite/25_algorithms/move_backward/93872.cc: Include
<iterator>.
* testsuite/25_algorithms/nth_element/constexpr.cc: Include
<functional>.
* testsuite/25_algorithms/partial_sort/constexpr.cc: Likewise.
* testsuite/25_algorithms/partial_sort_copy/constexpr.cc:
Likewise.
* testsuite/25_algorithms/search/constexpr.cc: Likewise.
* testsuite/25_algorithms/search_n/constrained.cc: Likewise.
* testsuite/25_algorithms/set_difference/constexpr.cc: Likewise.
* testsuite/25_algorithms/set_difference/constrained.cc:
Likewise.
* testsuite/25_algorithms/set_intersection/constexpr.cc:
Likewise.
* testsuite/25_algorithms/set_intersection/constrained.cc:
Likewise.
* testsuite/25_algorithms/set_symmetric_difference/constexpr.cc:
Likewise.
* testsuite/25_algorithms/set_union/constexpr.cc: Likewise.
* testsuite/25_algorithms/set_union/constrained.cc: Likewise.
* testsuite/25_algorithms/sort/constexpr.cc: Likewise.
* testsuite/25_algorithms/sort_heap/constexpr.cc: Likewise.
* testsuite/25_algorithms/transform/constrained.cc: Likewise.
* testsuite/25_algorithms/unique/constexpr.cc: Likewise.
* testsuite/25_algorithms/unique/constrained.cc: Likewise.
* testsuite/25_algorithms/unique_copy/constexpr.cc: Likewise.
* testsuite/25_algorithms/upper_bound/constexpr.cc: Likewise.
* testsuite/std/ranges/adaptors/elements.cc: Include <vector>.
* testsuite/std/ranges/adaptors/lazy_split.cc: Likewise.
* testsuite/std/ranges/adaptors/split.cc: Likewise.

48 files changed:
libstdc++-v3/include/pstl/glue_algorithm_defs.h
libstdc++-v3/include/pstl/utils.h
libstdc++-v3/src/c++17/fs_path.cc
libstdc++-v3/testsuite/25_algorithms/adjacent_find/constexpr.cc
libstdc++-v3/testsuite/25_algorithms/binary_search/constexpr.cc
libstdc++-v3/testsuite/25_algorithms/clamp/constrained.cc
libstdc++-v3/testsuite/25_algorithms/equal/constrained.cc
libstdc++-v3/testsuite/25_algorithms/for_each/constrained.cc
libstdc++-v3/testsuite/25_algorithms/includes/constrained.cc
libstdc++-v3/testsuite/25_algorithms/is_heap/constexpr.cc
libstdc++-v3/testsuite/25_algorithms/is_heap_until/constexpr.cc
libstdc++-v3/testsuite/25_algorithms/is_permutation/constrained.cc
libstdc++-v3/testsuite/25_algorithms/is_sorted/constexpr.cc
libstdc++-v3/testsuite/25_algorithms/is_sorted_until/constexpr.cc
libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/constexpr.cc
libstdc++-v3/testsuite/25_algorithms/lexicographical_compare/constrained.cc
libstdc++-v3/testsuite/25_algorithms/lexicographical_compare_three_way/1.cc
libstdc++-v3/testsuite/25_algorithms/lower_bound/constexpr.cc
libstdc++-v3/testsuite/25_algorithms/max/constrained.cc
libstdc++-v3/testsuite/25_algorithms/max_element/constrained.cc
libstdc++-v3/testsuite/25_algorithms/min/constrained.cc
libstdc++-v3/testsuite/25_algorithms/min_element/constrained.cc
libstdc++-v3/testsuite/25_algorithms/minmax_element/constrained.cc
libstdc++-v3/testsuite/25_algorithms/mismatch/constexpr.cc
libstdc++-v3/testsuite/25_algorithms/move/93872.cc
libstdc++-v3/testsuite/25_algorithms/move_backward/93872.cc
libstdc++-v3/testsuite/25_algorithms/nth_element/constexpr.cc
libstdc++-v3/testsuite/25_algorithms/partial_sort/constexpr.cc
libstdc++-v3/testsuite/25_algorithms/partial_sort_copy/constexpr.cc
libstdc++-v3/testsuite/25_algorithms/search/constexpr.cc
libstdc++-v3/testsuite/25_algorithms/search_n/constrained.cc
libstdc++-v3/testsuite/25_algorithms/set_difference/constexpr.cc
libstdc++-v3/testsuite/25_algorithms/set_difference/constrained.cc
libstdc++-v3/testsuite/25_algorithms/set_intersection/constexpr.cc
libstdc++-v3/testsuite/25_algorithms/set_intersection/constrained.cc
libstdc++-v3/testsuite/25_algorithms/set_symmetric_difference/constexpr.cc
libstdc++-v3/testsuite/25_algorithms/set_union/constexpr.cc
libstdc++-v3/testsuite/25_algorithms/set_union/constrained.cc
libstdc++-v3/testsuite/25_algorithms/sort/constexpr.cc
libstdc++-v3/testsuite/25_algorithms/sort_heap/constexpr.cc
libstdc++-v3/testsuite/25_algorithms/transform/constrained.cc
libstdc++-v3/testsuite/25_algorithms/unique/constexpr.cc
libstdc++-v3/testsuite/25_algorithms/unique/constrained.cc
libstdc++-v3/testsuite/25_algorithms/unique_copy/constexpr.cc
libstdc++-v3/testsuite/25_algorithms/upper_bound/constexpr.cc
libstdc++-v3/testsuite/std/ranges/adaptors/elements.cc
libstdc++-v3/testsuite/std/ranges/adaptors/lazy_split.cc
libstdc++-v3/testsuite/std/ranges/adaptors/split.cc

index 48bc56ae4019ffb80b709915711237a90a33a4cf..cef78e22e31c41056e44472ee5c8b8d4631c1cd7 100644 (file)
@@ -10,7 +10,7 @@
 #ifndef _PSTL_GLUE_ALGORITHM_DEFS_H
 #define _PSTL_GLUE_ALGORITHM_DEFS_H
 
-#include <functional>
+#include <bits/stl_pair.h>
 
 #include "execution_defs.h"
 
index 1711f292678855d60248dff37baf21c2bceaa512..0e908f1c5394d41c1f465e2578f31f2a5eb67651 100644 (file)
@@ -11,7 +11,7 @@
 #define _PSTL_UTILS_H
 
 #include <new>
-#include <iterator>
+#include <type_traits>
 
 namespace __pstl
 {
@@ -32,7 +32,7 @@ __except_handler(_Fp __f)
     }
     catch (...)
     {
-        std::terminate(); // Good bye according to the standard [algorithms.parallel.exceptions]
+        std::__terminate(); // Good bye according to the standard [algorithms.parallel.exceptions]
     }
 }
 
index a44fa284879f8d7862f4017894fda58aedf7bcd1..047082350ec6ca046377043ded3c7e87aa3a6286 100644 (file)
@@ -33,6 +33,7 @@
 
 #include <filesystem>
 #include <algorithm>
+#include <array>
 #include <bits/stl_uninitialized.h>
 
 namespace fs = std::filesystem;
index d2a741e8c91a4340bca8f8e96cfcf14891730f57..772db230041633f417571217a41777af1419efd6 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <algorithm>
 #include <array>
+#include <functional>
 
 constexpr std::array<int, 12> car{{0, 1, 2, 3, 4, 5, 6, 6, 8, 9, 9, 11}};
 
index 733a18c31adc4ef872127dd3f9fe6be0a2e76ade..f7a5fa12d3be495346c56d70780b822f75923e1e 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <algorithm>
 #include <array>
+#include <functional>
 
 constexpr bool
 test()
index 41b1f679234e9651a441b97a6b802daf1fccded5..5464dcf9a835fe8b615e3ad5ada8c099a4ceb561 100644 (file)
@@ -19,6 +19,7 @@
 // { dg-do run { target c++2a } }
 
 #include <algorithm>
+#include <functional>
 #include <testsuite_hooks.h>
 #include <testsuite_iterators.h>
 
index ac034813255f81efe1d7eadf801d90c93b5794d1..cab35525c2d7c7e6b6dc26fa026761c2b0d4e32a 100644 (file)
@@ -19,6 +19,7 @@
 // { dg-do run { target c++2a } }
 
 #include <algorithm>
+#include <functional>
 #include <testsuite_hooks.h>
 #include <testsuite_iterators.h>
 
index 85044a15092795ce64fb56bbdc4f1dce60dc9a97..9ffc33f88d50cf6534b5919fb82faa811258966f 100644 (file)
@@ -19,6 +19,7 @@
 // { dg-do run { target c++2a } }
 
 #include <algorithm>
+#include <functional>
 #include <testsuite_hooks.h>
 #include <testsuite_iterators.h>
 
index 1dd4312b4c8b72979179582ce6dbf8100161e526..a0ace5d82c254941d09f49866ccd298a19f491f3 100644 (file)
@@ -19,6 +19,7 @@
 // { dg-do run { target c++2a } }
 
 #include <algorithm>
+#include <functional>
 #include <testsuite_hooks.h>
 #include <testsuite_iterators.h>
 
index 420ff94cfdccf9ca6c448a54c44e12b913e497fe..a2e8e3981a1092c77bba1dfd21ba4a05f47224e1 100644 (file)
@@ -19,6 +19,7 @@
 // { dg-do compile { target c++2a } }
 
 #include <algorithm>
+#include <functional>
 #include <array>
 
 // heap
index 53e991fa4b9c2359155960ad13ed840ad0ad1759..be316eb8e9562b411e9beba9df19a9b1bc104d51 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <algorithm>
 #include <array>
+#include <functional>
 
 // heap
 constexpr std::array<int, 23>
index b5814a05addde17298b305c361e6ecd483614024..8d2013620b591f846713fbb5558871634a4d2fb3 100644 (file)
@@ -19,6 +19,7 @@
 // { dg-do run { target c++2a } }
 
 #include <algorithm>
+#include <iterator>
 #include <testsuite_hooks.h>
 #include <testsuite_iterators.h>
 
index e020d2ee17eb4b602f087b5af4d927c849fcf101..422c1ceaf65ab425f9b6e500194d92e06003b040 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <algorithm>
 #include <array>
+#include <functional>
 
 constexpr std::array<int, 12> ca0{{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}};
 
index 161437ed2a111918cac2d5d538d8e3f289cf1178..b3906330d694e935373eb33908f389565387127c 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <algorithm>
 #include <array>
+#include <functional>
 
 constexpr bool
 test()
index 855da0c766bed1dd30bc264b340f812d1d4871c5..d69527113d57e285630644bc7f8766bbcfbf5fec 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <algorithm>
 #include <array>
+#include <functional>
 
 constexpr bool
 test()
index 708f3dd8aba9f695041964ac7de493f3392f1a9f..ef904e65d6891ec4e3438da57b7ddc2233228b8d 100644 (file)
@@ -19,6 +19,7 @@
 // { dg-do run { target c++2a } }
 
 #include <algorithm>
+#include <functional>
 #include <testsuite_hooks.h>
 #include <testsuite_iterators.h>
 
index 48be0f6412bb66b157f4e407b626334575e819a1..16b77033713fc67cc73697096fa6ccb8a817edbb 100644 (file)
@@ -19,6 +19,7 @@
 // { dg-do run { target c++2a } }
 
 #include <algorithm>
+#include <array>
 #include <testsuite_hooks.h>
 #include <testsuite_iterators.h>
 
index 6041ffcb0c7ee00412bf9523988ff6e6167dbc70..8cd8fb989210540f9f876b89e0a13d685894bc8b 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <algorithm>
 #include <array>
+#include <functional>
 
 constexpr bool
 test()
index bba8e807ed67854b674fb918693f4bebada23aa0..10af2b172f8246d0c02e805e13957a48d63feef9 100644 (file)
@@ -19,6 +19,7 @@
 // { dg-do run { target c++2a } }
 
 #include <algorithm>
+#include <functional>
 #include <testsuite_hooks.h>
 #include <testsuite_iterators.h>
 
index 7139e37fcc9b2cb3ade7fa14f8d1617fa3863ab8..a4291b29381ac482c28d8170da2618c592634759 100644 (file)
@@ -19,6 +19,7 @@
 // { dg-do run { target c++2a } }
 
 #include <algorithm>
+#include <functional>
 #include <testsuite_hooks.h>
 #include <testsuite_iterators.h>
 
index 8bec9f9debc852c404678cb964e4fe08f83f4952..405bf9683356b0860bb4f2946667081881ac35dc 100644 (file)
@@ -19,6 +19,7 @@
 // { dg-do run { target c++2a } }
 
 #include <algorithm>
+#include <functional>
 #include <testsuite_hooks.h>
 #include <testsuite_iterators.h>
 
index bc07e3fe5e4fd15b171a0dfc240b04f6674c7b26..94ec58708f71b7f0807228f6e41b359ac9a92dc1 100644 (file)
@@ -19,6 +19,7 @@
 // { dg-do run { target c++2a } }
 
 #include <algorithm>
+#include <functional>
 #include <testsuite_hooks.h>
 #include <testsuite_iterators.h>
 
index f8785c4c45c9605cd29af20bf7f8e2fba5a6dcca..df199230a7878514ed2ce92904b1ed5c9229c01f 100644 (file)
@@ -19,6 +19,7 @@
 // { dg-do run { target c++2a } }
 
 #include <algorithm>
+#include <functional>
 #include <testsuite_hooks.h>
 #include <testsuite_iterators.h>
 
index 3b4433c05f482f9a9443b2e5e23aab9267612629..f32c1a6224d954e76bfa39d2555fb00bbeea629e 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <algorithm>
 #include <array>
+#include <functional>
 
 constexpr bool
 test()
index b78012695452cdd1b42d94a590cabf274fc904df..4b0c81051719d527d4a0996c15534040a7d2318d 100644 (file)
@@ -19,6 +19,7 @@
 // { dg-do compile { target c++2a } }
 
 #include <algorithm>
+#include <functional>
 
 struct X
 {
index af1fd106334fe696810ba65b350a9ad88445c177..4dc51a178fa358e68e2687f6d0e345b29146c586 100644 (file)
@@ -19,6 +19,7 @@
 // { dg-do compile { target c++2a } }
 
 #include <algorithm>
+#include <iterator>
 
 struct X
 {
index 36b71e44b780e5861700a4cdd5b46bf0ab30b39c..5bd424a9ceadbaa775b9239ba5bd5e8d7b05f916 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <algorithm>
 #include <array>
+#include <functional>
 
 constexpr bool
 test()
index 63ff97eb3a155cd13bcd734323d6a01345a50012..f24db97b51c31dd79f6bdebf00d6062a06fe5083 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <algorithm>
 #include <array>
+#include <functional>
 
 constexpr bool
 test()
index eca915fd57ac5b344c1b9da8f30242a1dc5ff62e..c87b978579006011433febfeea1e5bbb9bfdad30 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <algorithm>
 #include <array>
+#include <functional>
 
 constexpr bool
 test()
index de0ff5d219396d8fd4e30c7f9e57b9be6653be8b..a796a081c8592ecee4befd636467d0e25909961b 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <algorithm>
 #include <array>
+#include <functional>
 
 constexpr bool
 test()
index d91daf74f1f126c971b4eac681e0bbacfd215bdc..0ba12fe7afa4fd9a8d8a15a6d738f6b7001c7e7b 100644 (file)
@@ -19,6 +19,7 @@
 // { dg-do run { target c++2a } }
 
 #include <algorithm>
+#include <functional>
 #include <testsuite_hooks.h>
 #include <testsuite_iterators.h>
 
index 5c520ecaa4e17d830e4a29370bb032c4c70c2d4a..0eb0f6a0156189286db3fcee8268747f237c2a43 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <algorithm>
 #include <array>
+#include <functional>
 
 constexpr bool
 test()
index b27d1c73c5b281aea28491a30a9c0a5553866753..bee831fd0bfa73273e9bba68c28488bda57f5ece 100644 (file)
@@ -19,6 +19,7 @@
 // { dg-do run { target c++2a } }
 
 #include <algorithm>
+#include <functional>
 #include <testsuite_hooks.h>
 #include <testsuite_iterators.h>
 
index b561f18302ee5e362cf416cf38c7a17e2c56c4b4..15ee0169950dcb8d7d8ba1ebb1c0e4b03291aa23 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <algorithm>
 #include <array>
+#include <functional>
 
 constexpr bool
 test()
index 39311f26f5c43c58988344edc0e282ce91ada81a..c80d0408aae6943919c8e0861ccd4782ae66373c 100644 (file)
@@ -19,6 +19,7 @@
 // { dg-do run { target c++2a } }
 
 #include <algorithm>
+#include <functional>
 #include <testsuite_hooks.h>
 #include <testsuite_iterators.h>
 
index fc578cc7e794e340c3f530585cfb414d650bf4e5..ee9934408ca4541d9d0c96e1fbc93afaf1979909 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <algorithm>
 #include <array>
+#include <functional>
 
 constexpr bool
 test()
index 8782113738297d8bb701026724a20a55aa7d7bd6..e9a1cbfd658d6fd4f02fec6a45f6adf0d242f2c1 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <algorithm>
 #include <array>
+#include <functional>
 
 constexpr bool
 test()
index f53827fd2092617b3ea13543cd05da6f78fc3bf6..2e8a603c4d7bd5c99a55033da35c29b034141b46 100644 (file)
@@ -19,6 +19,7 @@
 // { dg-do run { target c++2a } }
 
 #include <algorithm>
+#include <functional>
 #include <testsuite_hooks.h>
 #include <testsuite_iterators.h>
 
index b6a71294782c948f8dd536714f4891035e1e4e55..2a55f3ec70265279fdc0b2d84c2cec476a35ce3e 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <algorithm>
 #include <array>
+#include <functional>
 
 constexpr bool
 test()
index b799f566da5ca604894ab52e867870f4f7b0147c..98c5f01b6ad334f51bc92e3a663b7f5dbdfa82fe 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <algorithm>
 #include <array>
+#include <functional>
 
 constexpr bool
 test()
index 1db415697e449cbecf0e99adab49cbe3cd5ed993..b3005d961471acbccd35e8966cdbbbcd9866d30d 100644 (file)
@@ -19,6 +19,7 @@
 // { dg-do run { target c++2a } }
 
 #include <algorithm>
+#include <functional>
 #include <testsuite_hooks.h>
 #include <testsuite_iterators.h>
 
index 7475ec721e528d3ff8dc58e17a643290a6f5f9db..384cec27d562336f66ecde4dbd9c64fcd95eec7a 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <algorithm>
 #include <array>
+#include <functional>
 
 constexpr bool
 test()
index f0fc3c3b6b527e7b1a496d6620e2fe5e13e5aec5..2f0f6872440062f4aac125edbc5a25c42ff73e4b 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <list>
 #include <algorithm>
+#include <functional>
 #include <testsuite_hooks.h>
 #include <testsuite_iterators.h>
 
index 200a5ce470fd57cdf4ef14d9a4db06a823d253c7..bfa375c023fdc0cdab7f19e0e697e52e905cb64f 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <algorithm>
 #include <array>
+#include <functional>
 
 constexpr bool
 test()
index 2e87bab0170418430ea86c21adb3deb14bbe7bfb..0735c608a848e1863e3614e6e4f4c261ef4450d0 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <algorithm>
 #include <array>
+#include <functional>
 
 constexpr bool
 test()
index 93a1c6d3053d38d7c289bffc119907ec993b052c..30e4e419a34516223dd43f653393f02c1008d20f 100644 (file)
 
 #include <algorithm>
 #include <ranges>
+#include <tuple>
+#include <vector>
 #include <testsuite_hooks.h>
 #include <testsuite_iterators.h>
-#include <tuple>
 
 namespace ranges = std::ranges;
 namespace views = ranges::views;
index e46f76d7632e4d1f09ad0a1e6c0d1c2550464ee1..21c0837cdd37eb9d14ccdabae6af1526ea533ac4 100644 (file)
@@ -22,6 +22,7 @@
 #include <ranges>
 #include <string>
 #include <string_view>
+#include <vector>
 #include <testsuite_hooks.h>
 #include <testsuite_iterators.h>
 
index ca10608efb5433cda35d460248548384b1466854..a46f898a66314af360380ad6a6c77a95a5feaf69 100644 (file)
@@ -22,6 +22,7 @@
 #include <ranges>
 #include <string>
 #include <string_view>
+#include <vector>
 #include <testsuite_hooks.h>
 #include <testsuite_iterators.h>