aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2024-07-24 11:32:22 +0100
committerJonathan Wakely <redi@gcc.gnu.org>2024-07-24 17:18:05 +0100
commit6c22fe418cff57dad712c4b950638e6e2d09bd9c (patch)
tree765df06941b6489fc554f5fbbbc40e007886f15f
parent5fc9c40fea2481e56bf7bcc994cb40c71e28abb8 (diff)
downloadgcc-6c22fe418cff57dad712c4b950638e6e2d09bd9c.zip
gcc-6c22fe418cff57dad712c4b950638e6e2d09bd9c.tar.gz
gcc-6c22fe418cff57dad712c4b950638e6e2d09bd9c.tar.bz2
libstdc++: Fix <ostream> and <istream> for -std=gnu++14 -fconcepts [PR116070]
This questionable combination of flags causes a number of errors. The ones in the rvalue stream overloads need to be fixed in the gcc-14 branch so I'm committing it separately to simplify backporting. libstdc++-v3/ChangeLog: PR libstdc++/116070 * include/std/istream: Check feature test macro before using is_class_v and is_same_v. * include/std/ostream: Likewise.
-rw-r--r--libstdc++-v3/include/std/istream2
-rw-r--r--libstdc++-v3/include/std/ostream2
2 files changed, 2 insertions, 2 deletions
diff --git a/libstdc++-v3/include/std/istream b/libstdc++-v3/include/std/istream
index 11d51d3..a2b207d 100644
--- a/libstdc++-v3/include/std/istream
+++ b/libstdc++-v3/include/std/istream
@@ -1069,7 +1069,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// 2328. Rvalue stream extraction should use perfect forwarding
// 1203. More useful rvalue stream insertion
-#if __cpp_concepts >= 201907L
+#if __cpp_concepts >= 201907L && __glibcxx_type_trait_variable_templates
template<typename _Is, typename _Tp>
requires __derived_from_ios_base<_Is>
&& requires (_Is& __is, _Tp&& __t) { __is >> std::forward<_Tp>(__t); }
diff --git a/libstdc++-v3/include/std/ostream b/libstdc++-v3/include/std/ostream
index 8a21758..12be6c4 100644
--- a/libstdc++-v3/include/std/ostream
+++ b/libstdc++-v3/include/std/ostream
@@ -768,7 +768,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 1203. More useful rvalue stream insertion
-#if __cpp_concepts >= 201907L
+#if __cpp_concepts >= 201907L && __glibcxx_type_trait_variable_templates
// Use concepts if possible because they're cheaper to evaluate.
template<typename _Tp>
concept __derived_from_ios_base = is_class_v<_Tp>