This can greatly reduce the amount of preprocessed code that is included by other headers, because <stdexcept> depends on <string> which is huge.
* include/std/array: Do not include <stdexcept>. * include/std/optional: Include <exception> and <bits/exception_defines.h> instead of <stdexcept>. Preprocessed line counts for C++17 mode: <tuple> <memory> <map> Before 25774 32453 31616 After 9925 23194 19062 Tested x86_64-linux, committed to trunk. Once we have a gcc-10/porting_to.html page I'll note this change there, because code relying on std::string and std::allocator being defined by transitive includes will need to include the right headers.
commit 9eb6db53fb072e20b1d54b16d8c1c77638c934e5 Author: redi <redi@138bc75d-0d04-0410-961f-82ee72b054a4> Date: Thu Jun 6 15:34:56 2019 +0000 Avoid unnecessary inclusion of <stdexcept> header This can greatly reduce the amount of preprocessed code that is included by other headers, because <stdexcept> depends on <string> which is huge. * include/std/array: Do not include <stdexcept>. * include/std/optional: Include <exception> and <bits/exception_defines.h> instead of <stdexcept>. * testsuite/20_util/function_objects/searchers.cc: Include <cctype> for std::isalnum. * testsuite/20_util/tuple/cons/deduction.cc: Include <memory> for std::allocator. * testsuite/23_containers/map/erasure.cc: Include <string>. * testsuite/23_containers/unordered_map/erasure.cc: Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@272011 138bc75d-0d04-0410-961f-82ee72b054a4 diff --git a/libstdc++-v3/include/std/array b/libstdc++-v3/include/std/array index 02c6f4b4dbe..230e2b0f593 100644 --- a/libstdc++-v3/include/std/array +++ b/libstdc++-v3/include/std/array @@ -36,7 +36,7 @@ #else #include <utility> -#include <stdexcept> +#include <bits/functexcept.h> #include <bits/stl_algobase.h> #include <bits/range_access.h> diff --git a/libstdc++-v3/include/std/optional b/libstdc++-v3/include/std/optional index ae825d3e327..79cd6c97019 100644 --- a/libstdc++-v3/include/std/optional +++ b/libstdc++-v3/include/std/optional @@ -35,10 +35,10 @@ #include <utility> #include <type_traits> -#include <stdexcept> +#include <exception> #include <new> #include <initializer_list> -#include <bits/functexcept.h> +#include <bits/exception_defines.h> #include <bits/functional_hash.h> #include <bits/enable_special_members.h> diff --git a/libstdc++-v3/testsuite/20_util/function_objects/searchers.cc b/libstdc++-v3/testsuite/20_util/function_objects/searchers.cc index aae21d28d3a..fc278860f5c 100644 --- a/libstdc++-v3/testsuite/20_util/function_objects/searchers.cc +++ b/libstdc++-v3/testsuite/20_util/function_objects/searchers.cc @@ -19,6 +19,7 @@ #include <functional> #include <cstring> +#include <cctype> #ifdef _GLIBCXX_USE_WCHAR_T # include <cwchar> #endif diff --git a/libstdc++-v3/testsuite/20_util/tuple/cons/deduction.cc b/libstdc++-v3/testsuite/20_util/tuple/cons/deduction.cc index fa91f8fa539..eb3f2f3d6ab 100644 --- a/libstdc++-v3/testsuite/20_util/tuple/cons/deduction.cc +++ b/libstdc++-v3/testsuite/20_util/tuple/cons/deduction.cc @@ -19,6 +19,7 @@ // <http://www.gnu.org/licenses/>. #include <tuple> +#include <memory> template<typename T, typename U> struct require_same; template<typename T> struct require_same<T, T> { using type = void; }; diff --git a/libstdc++-v3/testsuite/23_containers/map/erasure.cc b/libstdc++-v3/testsuite/23_containers/map/erasure.cc index d8a57160865..5b211c3602b 100644 --- a/libstdc++-v3/testsuite/23_containers/map/erasure.cc +++ b/libstdc++-v3/testsuite/23_containers/map/erasure.cc @@ -19,6 +19,7 @@ // <http://www.gnu.org/licenses/>. #include <map> +#include <string> #include <testsuite_hooks.h> #ifndef __cpp_lib_erase_if diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/erasure.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/erasure.cc index 35190a0d19e..17bb940f00f 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_map/erasure.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_map/erasure.cc @@ -19,6 +19,7 @@ // <http://www.gnu.org/licenses/>. #include <unordered_map> +#include <string> #include <testsuite_hooks.h> #ifndef __cpp_lib_erase_if