[gcc r9-9359] libstdc++: Fix errors from Library Fundamentals TS headers in C++11 [PR 98319]
Jonathan Wakely
redi@gcc.gnu.org
Mon Apr 19 09:31:04 GMT 2021
https://gcc.gnu.org/g:9736d20a85a20339417e1aafeae4d9a0a73c52ae
commit r9-9359-g9736d20a85a20339417e1aafeae4d9a0a73c52ae
Author: Jonathan Wakely <jwakely@redhat.com>
Date: Wed Dec 16 13:37:17 2020 +0000
libstdc++: Fix errors from Library Fundamentals TS headers in C++11 [PR 98319]
Currently the <experimental/random>, <experimental/source_location> and
<experimental/utility> headers can be included in C++98 and C++11 modes,
but gives errors. With this change they can be included, but define
nothing.
libstdc++-v3/ChangeLog:
PR libstdc++/98319
* include/experimental/memory_resource: Add system_header pragma
and only define contents for C++14 and later.
* include/experimental/random: Only define contents for C++14
and later.
* include/experimental/source_location: Likewise.
* include/experimental/utility: Likewise.
* testsuite/experimental/feat-lib-fund.cc: Include all LFTS
headers that are present. Allow test to run for all modes.
(cherry picked from commit ab9bd93271061f436c10e35e261ecb73e2108ccc)
Diff:
---
libstdc++-v3/include/experimental/memory_resource | 5 ++
libstdc++-v3/include/experimental/random | 4 +-
libstdc++-v3/include/experimental/source_location | 4 +-
libstdc++-v3/include/experimental/utility | 4 +-
.../testsuite/experimental/feat-lib-fund.cc | 93 +++++++++-------------
5 files changed, 50 insertions(+), 60 deletions(-)
diff --git a/libstdc++-v3/include/experimental/memory_resource b/libstdc++-v3/include/experimental/memory_resource
index e9fece55cd0..17dfe87be4c 100644
--- a/libstdc++-v3/include/experimental/memory_resource
+++ b/libstdc++-v3/include/experimental/memory_resource
@@ -29,6 +29,10 @@
#ifndef _GLIBCXX_EXPERIMENTAL_MEMORY_RESOURCE
#define _GLIBCXX_EXPERIMENTAL_MEMORY_RESOURCE 1
+#pragma GCC system_header
+
+#if __cplusplus >= 201402L
+
#include <memory> // align, uses_allocator, __uses_alloc
#include <experimental/utility> // pair, experimental::erased_type
#include <atomic> // atomic
@@ -528,4 +532,5 @@ namespace pmr {
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
+#endif // C++14
#endif // _GLIBCXX_EXPERIMENTAL_MEMORY_RESOURCE
diff --git a/libstdc++-v3/include/experimental/random b/libstdc++-v3/include/experimental/random
index 7176c80f7ea..c5bcd0804d6 100644
--- a/libstdc++-v3/include/experimental/random
+++ b/libstdc++-v3/include/experimental/random
@@ -29,6 +29,7 @@
#ifndef _GLIBCXX_EXPERIMENTAL_RANDOM
#define _GLIBCXX_EXPERIMENTAL_RANDOM 1
+#if __cplusplus >= 201402L
#include <random>
#include <experimental/bits/lfts_config.h>
@@ -77,4 +78,5 @@ inline namespace fundamentals_v2 {
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
-#endif
+#endif // C++14
+#endif // _GLIBCXX_EXPERIMENTAL_RANDOM
diff --git a/libstdc++-v3/include/experimental/source_location b/libstdc++-v3/include/experimental/source_location
index 9fa3c4bb9a7..74d4d319766 100644
--- a/libstdc++-v3/include/experimental/source_location
+++ b/libstdc++-v3/include/experimental/source_location
@@ -29,6 +29,7 @@
#ifndef _GLIBCXX_EXPERIMENTAL_SRCLOC
#define _GLIBCXX_EXPERIMENTAL_SRCLOC 1
+#if __cplusplus >= 201402L
#include <cstdint>
namespace std {
@@ -83,4 +84,5 @@ inline namespace fundamentals_v2 {
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
-#endif
+#endif // C++14
+#endif // _GLIBCXX_EXPERIMENTAL_SRCLOC
diff --git a/libstdc++-v3/include/experimental/utility b/libstdc++-v3/include/experimental/utility
index fff7bdbb892..6d86563c2fe 100644
--- a/libstdc++-v3/include/experimental/utility
+++ b/libstdc++-v3/include/experimental/utility
@@ -29,6 +29,7 @@
#ifndef _GLIBCXX_EXPERIMENTAL_UTILITY
#define _GLIBCXX_EXPERIMENTAL_UTILITY 1
+#if __cplusplus >= 201402L
#include <utility>
#include <bits/uses_allocator.h>
#include <experimental/bits/lfts_config.h>
@@ -46,4 +47,5 @@ inline namespace fundamentals_v2 {
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
-#endif
+#endif // C++14
+#endif // _GLIBCXX_EXPERIMENTAL_UTILITY
diff --git a/libstdc++-v3/testsuite/experimental/feat-lib-fund.cc b/libstdc++-v3/testsuite/experimental/feat-lib-fund.cc
index b0e6e289009..342edc5352d 100644
--- a/libstdc++-v3/testsuite/experimental/feat-lib-fund.cc
+++ b/libstdc++-v3/testsuite/experimental/feat-lib-fund.cc
@@ -1,57 +1,36 @@
-// { dg-do preprocess { target c++14 } }
-
-#if !__has_include(<experimental/tuple>)
-# error "<experimental/tuple>"
-#endif
-
-#if !__has_include(<experimental/type_traits>)
-# error "<experimental/type_traits>"
-#endif
-
-#if !__has_include(<experimental/ratio>)
-# error "<experimental/ratio>"
-#endif
-
-#if !__has_include(<experimental/chrono>)
-# error "<experimental/chrono>"
-#endif
-
-#if !__has_include(<experimental/system_error>)
-# error "<experimental/system_error>"
-#endif
-
-#if !__has_include(<experimental/functional>)
-# error "<experimental/functional>"
-#endif
-
-#if !__has_include(<experimental/optional>)
-# error "<experimental/optional>"
-#endif
-
-#if !__has_include(<experimental/any>)
-# error "<experimental/any>"
-#endif
-
-#if !__has_include(<experimental/string_view>)
-# error "<experimental/string_view>"
-#endif
-
-//#if !__has_include(<experimental/memory>)
-//# error "<experimental/memory>"
-//#endif
-
-//#if !__has_include(<experimental/memory_resource>)
-//# error "<experimental/memory_resource>"
-//#endif
-
-//#if !__has_include(<experimental/future>)
-//# error "<experimental/future>"
-//#endif
-
-#if !__has_include(<experimental/algorithm>)
-# error "<experimental/algorithm>"
-#endif
-
-//#if !__has_include(<experimental/net>)
-//# error "<experimental/net>"
-//#endif
+// { dg-do preprocess }
+
+// Include all the LFTS headers. This should work with any -std flag.
+
+#include <experimental/algorithm>
+#include <experimental/any>
+#include <experimental/array>
+#include <experimental/chrono>
+#include <experimental/deque>
+#include <experimental/forward_list>
+#include <experimental/functional>
+#if __has_include(<experimental/future>) // not supported as of GCC 11
+# include <experimental/future>
+#endif
+#include <experimental/iterator>
+#include <experimental/list>
+#include <experimental/map>
+#include <experimental/memory>
+#include <experimental/memory_resource>
+#include <experimental/numeric>
+#include <experimental/optional>
+#include <experimental/propagate_const>
+#include <experimental/random>
+#include <experimental/ratio>
+#include <experimental/regex>
+#include <experimental/set>
+#include <experimental/source_location>
+#include <experimental/string>
+#include <experimental/string_view>
+#include <experimental/system_error>
+#include <experimental/tuple>
+#include <experimental/type_traits>
+#include <experimental/unordered_map>
+#include <experimental/unordered_set>
+#include <experimental/utility>
+#include <experimental/vector>
More information about the Libstdc++-cvs
mailing list