aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2025-04-03 13:59:14 +0100
committerJonathan Wakely <redi@gcc.gnu.org>2025-04-04 10:29:57 +0100
commitaffdef57a45a443ead24f6afb7027a2683028031 (patch)
treedf959199535a9f9b51cee1c5f0e8da9508d8336e
parent4b884f3d6335539447d32c6462cc4ef52e30e273 (diff)
downloadgcc-affdef57a45a443ead24f6afb7027a2683028031.zip
gcc-affdef57a45a443ead24f6afb7027a2683028031.tar.gz
gcc-affdef57a45a443ead24f6afb7027a2683028031.tar.bz2
libstdc++: Check feature test macro for std::string_view in <string>
We can use the __glibcxx_string_view macro to guard the uses of std::string_view in <string>, instead of just checking the value of __cplusplus. It makes no practical difference because __glibcxx_string_view is defined for C++17 and up, but it makes it clear to readers that the lines guarded by that macro are features that depend on string_view. We could be more precise and check __glibcxx_string_view >= 201606L which is the value for the P0254R2 paper that integrated std::string_view with std::string, but I think just checking for the macro being defined is clear enough. We can also check __glibcxx_variant for the _Never_valueless_alt partial specialization. libstdc++-v3/ChangeLog: * include/bits/basic_string.h: Check __glibcxx_string_view and __glibcxx_variant instead of __cplusplus >= 2017L. * include/bits/cow_string.h: Likewise. Reviewed-by: Tomasz KamiƄski <tkaminsk@redhat.com>
-rw-r--r--libstdc++-v3/include/bits/basic_string.h39
-rw-r--r--libstdc++-v3/include/bits/cow_string.h30
2 files changed, 35 insertions, 34 deletions
diff --git a/libstdc++-v3/include/bits/basic_string.h b/libstdc++-v3/include/bits/basic_string.h
index 86841cb..886e7e6 100644
--- a/libstdc++-v3/include/bits/basic_string.h
+++ b/libstdc++-v3/include/bits/basic_string.h
@@ -45,7 +45,9 @@
#include <initializer_list>
#endif
-#if __cplusplus >= 201703L
+#include <bits/version.h>
+
+#ifdef __glibcxx_string_view // >= C++17
# include <string_view>
#endif
@@ -53,7 +55,6 @@
# include <charconv>
#endif
-#include <bits/version.h>
#if ! _GLIBCXX_USE_CXX11_ABI
# include "cow_string.h"
@@ -146,7 +147,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
return __p;
}
-#if __cplusplus >= 201703L
+#ifdef __glibcxx_string_view // >= C++17
// A helper type for avoiding boiler-plate.
typedef basic_string_view<_CharT, _Traits> __sv_type;
@@ -788,7 +789,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
#endif
}
-#if __cplusplus >= 201703L
+#ifdef __glibcxx_string_view // >= C++17
/**
* @brief Construct string from a substring of a string_view.
* @param __t Source object convertible to string view.
@@ -944,7 +945,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
}
#endif // C++11
-#if __cplusplus >= 201703L
+#ifdef __glibcxx_string_view // >= C++17
/**
* @brief Set value to string constructed from a string_view.
* @param __svt An object convertible to string_view.
@@ -1439,7 +1440,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
{ return this->append(__l.begin(), __l.size()); }
#endif // C++11
-#if __cplusplus >= 201703L
+#ifdef __glibcxx_string_view // >= C++17
/**
* @brief Append a string_view.
* @param __svt An object convertible to string_view to be appended.
@@ -1556,7 +1557,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
append(_InputIterator __first, _InputIterator __last)
{ return this->replace(end(), end(), __first, __last); }
-#if __cplusplus >= 201703L
+#ifdef __glibcxx_string_view
/**
* @brief Append a string_view.
* @param __svt An object convertible to string_view to be appended.
@@ -1809,7 +1810,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
}
#endif // C++11
-#if __cplusplus >= 201703L
+#ifdef __glibcxx_string_view // >= C++17
/**
* @brief Set value from a string_view.
* @param __svt The source object convertible to string_view.
@@ -2090,7 +2091,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
return iterator(_M_data() + __pos);
}
-#if __cplusplus >= 201703L
+#ifdef __glibcxx_string_view // >= C++17
/**
* @brief Insert a string_view.
* @param __pos Position in string to insert at.
@@ -2542,7 +2543,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
{ return this->replace(__i1, __i2, __l.begin(), __l.size()); }
#endif // C++11
-#if __cplusplus >= 201703L
+#ifdef __glibcxx_string_view // >= C++17
/**
* @brief Replace range of characters with string_view.
* @param __pos The position to replace at.
@@ -2741,7 +2742,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
_GLIBCXX_NOEXCEPT
{ return this->find(__str.data(), __pos, __str.size()); }
-#if __cplusplus >= 201703L
+#ifdef __glibcxx_string_view // >= C++17
/**
* @brief Find position of a string_view.
* @param __svt The object convertible to string_view to locate.
@@ -2807,7 +2808,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
_GLIBCXX_NOEXCEPT
{ return this->rfind(__str.data(), __pos, __str.size()); }
-#if __cplusplus >= 201703L
+#ifdef __glibcxx_string_view // >= C++17
/**
* @brief Find last position of a string_view.
* @param __svt The object convertible to string_view to locate.
@@ -2891,7 +2892,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
_GLIBCXX_NOEXCEPT
{ return this->find_first_of(__str.data(), __pos, __str.size()); }
-#if __cplusplus >= 201703L
+#ifdef __glibcxx_string_view // >= C++17
/**
* @brief Find position of a character of a string_view.
* @param __svt An object convertible to string_view containing
@@ -2980,7 +2981,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
_GLIBCXX_NOEXCEPT
{ return this->find_last_of(__str.data(), __pos, __str.size()); }
-#if __cplusplus >= 201703L
+#ifdef __glibcxx_string_view // >= C++17
/**
* @brief Find last position of a character of string.
* @param __svt An object convertible to string_view containing
@@ -3068,7 +3069,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
_GLIBCXX_NOEXCEPT
{ return this->find_first_not_of(__str.data(), __pos, __str.size()); }
-#if __cplusplus >= 201703L
+#ifdef __glibcxx_string_view // >= C++17
/**
* @brief Find position of a character not in a string_view.
* @param __svt A object convertible to string_view containing
@@ -3155,7 +3156,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
_GLIBCXX_NOEXCEPT
{ return this->find_last_not_of(__str.data(), __pos, __str.size()); }
-#if __cplusplus >= 201703L
+#ifdef __glibcxx_string_view // >= C++17
/**
* @brief Find last position of a character not in a string_view.
* @param __svt An object convertible to string_view containing
@@ -3271,7 +3272,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
return __r;
}
-#if __cplusplus >= 201703L
+#ifdef __glibcxx_string_view // >= C++17
/**
* @brief Compare to a string_view.
* @param __svt An object convertible to string_view to compare against.
@@ -4605,7 +4606,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
constexpr
#endif
inline wstring
-#if __cplusplus >= 201703L
+#ifdef __glibcxx_string_view // >= C++17
__to_wstring_numeric(string_view __s)
#else
__to_wstring_numeric(const string& __s)
@@ -4808,7 +4809,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
} // inline namespace literals
#endif // __glibcxx_string_udls
-#if __cplusplus >= 201703L
+#ifdef __glibcxx_variant // >= C++17
namespace __detail::__variant
{
template<typename> struct _Never_valueless_alt; // see <variant>
diff --git a/libstdc++-v3/include/bits/cow_string.h b/libstdc++-v3/include/bits/cow_string.h
index 740e046..d5b3979 100644
--- a/libstdc++-v3/include/bits/cow_string.h
+++ b/libstdc++-v3/include/bits/cow_string.h
@@ -467,7 +467,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_S_empty_rep() _GLIBCXX_NOEXCEPT
{ return _Rep::_S_empty_rep(); }
-#if __cplusplus >= 201703L
+#ifdef __glibcxx_string_view // >= C++17
// A helper type for avoiding boiler-plate.
typedef basic_string_view<_CharT, _Traits> __sv_type;
@@ -685,7 +685,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
: _M_dataplus(_S_construct(__beg, __end, __a), __a)
{ }
-#if __cplusplus >= 201703L
+#ifdef __glibcxx_string_view // >= C++17
/**
* @brief Construct string from a substring of a string_view.
* @param __t Source object convertible to string view.
@@ -775,7 +775,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
#endif // C++11
-#if __cplusplus >= 201703L
+#ifdef __glibcxx_string_view // >= C++17
/**
* @brief Set value to string constructed from a string_view.
* @param __svt An object convertible to string_view.
@@ -1246,7 +1246,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return this->append(__l.begin(), __l.size()); }
#endif // C++11
-#if __cplusplus >= 201703L
+#ifdef __glibcxx_string_view // >= C++17
/**
* @brief Append a string_view.
* @param __svt The object convertible to string_view to be appended.
@@ -1338,7 +1338,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
append(_InputIterator __first, _InputIterator __last)
{ return this->replace(_M_iend(), _M_iend(), __first, __last); }
-#if __cplusplus >= 201703L
+#ifdef __glibcxx_string_view // >= C++17
/**
* @brief Append a string_view.
* @param __svt The object convertible to string_view to be appended.
@@ -1496,7 +1496,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return this->assign(__l.begin(), __l.size()); }
#endif // C++11
-#if __cplusplus >= 201703L
+#ifdef __glibcxx_string_view // >= C++17
/**
* @brief Set value from a string_view.
* @param __svt The source object convertible to string_view.
@@ -1703,7 +1703,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return iterator(_M_data() + __pos);
}
-#if __cplusplus >= 201703L
+#ifdef __glibcxx_string_view // >= C++17
/**
* @brief Insert a string_view.
* @param __pos Position in string to insert at.
@@ -2092,7 +2092,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ return this->replace(__i1, __i2, __l.begin(), __l.end()); }
#endif // C++11
-#if __cplusplus >= 201703L
+#ifdef __glibcxx_string_view // >= C++17
/**
* @brief Replace range of characters with string_view.
* @param __pos The position to replace at.
@@ -2354,7 +2354,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
size_type
find(_CharT __c, size_type __pos = 0) const _GLIBCXX_NOEXCEPT;
-#if __cplusplus >= 201703L
+#ifdef __glibcxx_string_view // >= C++17
/**
* @brief Find position of a string_view.
* @param __svt The object convertible to string_view to locate.
@@ -2432,7 +2432,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
size_type
rfind(_CharT __c, size_type __pos = npos) const _GLIBCXX_NOEXCEPT;
-#if __cplusplus >= 201703L
+#ifdef __glibcxx_string_view // >= C++17
/**
* @brief Find last position of a string_view.
* @param __svt The object convertible to string_view to locate.
@@ -2515,7 +2515,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
find_first_of(_CharT __c, size_type __pos = 0) const _GLIBCXX_NOEXCEPT
{ return this->find(__c, __pos); }
-#if __cplusplus >= 201703L
+#ifdef __glibcxx_string_view // >= C++17
/**
* @brief Find position of a character of a string_view.
* @param __svt An object convertible to string_view containing
@@ -2599,7 +2599,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
find_last_of(_CharT __c, size_type __pos = npos) const _GLIBCXX_NOEXCEPT
{ return this->rfind(__c, __pos); }
-#if __cplusplus >= 201703L
+#ifdef __glibcxx_string_view // >= C++17
/**
* @brief Find last position of a character of string.
* @param __svt An object convertible to string_view containing
@@ -2680,7 +2680,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
find_first_not_of(_CharT __c, size_type __pos = 0) const
_GLIBCXX_NOEXCEPT;
-#if __cplusplus >= 201703L
+#ifdef __glibcxx_string_view // >= C++17
/**
* @brief Find position of a character not in a string_view.
* @param __svt An object convertible to string_view containing
@@ -2762,7 +2762,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
find_last_not_of(_CharT __c, size_type __pos = npos) const
_GLIBCXX_NOEXCEPT;
-#if __cplusplus >= 201703L
+#ifdef __glibcxx_string_view // >= C++17
/**
* @brief Find last position of a character not in a string_view.
* @param __svt An object convertible to string_view containing
@@ -2824,7 +2824,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return __r;
}
-#if __cplusplus >= 201703L
+#ifdef __glibcxx_string_view // >= C++17
/**
* @brief Compare to a string_view.
* @param __svt An object convertible to string_view to compare against.