aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3/include/std/ostream
diff options
context:
space:
mode:
authorTom Honermann <tom@honermann.net>2019-11-29 17:43:42 +0000
committerJonathan Wakely <redi@gcc.gnu.org>2019-11-29 17:43:42 +0000
commit2b4e2c93d908afb575b7f9bcd0c8c9ad63e717d0 (patch)
tree696633db265f9ecfc6fb989121ad0b8f725ffd9f /libstdc++-v3/include/std/ostream
parenta1e7d33bb9458f76a2d49209a3825940ca7fbe0b (diff)
downloadgcc-2b4e2c93d908afb575b7f9bcd0c8c9ad63e717d0.zip
gcc-2b4e2c93d908afb575b7f9bcd0c8c9ad63e717d0.tar.gz
gcc-2b4e2c93d908afb575b7f9bcd0c8c9ad63e717d0.tar.bz2
libstdc++: P1423R3 char8_t remediation (2/4)
Update feature test macro, add deleted operators, update u8path This patch increments the __cpp_lib_char8_t feature test macro, adds deleted operator<< overloads for basic_ostream, and modifies u8path to accept sequences of char8_t for both the C++17 implementation of std::filesystem, and the filesystem TS implementation. The implementation mechanism used for u8path differs between the C++17 and filesystem TS implementations. The changes to the former take advantage of C++17 'if constexpr'. The changes to the latter retain C++11 compatibility and rely on tag dispatching. 2019-11-29 Tom Honermann <tom@honermann.net> Update feature test macro, add deleted operators, update u8path * include/bits/c++config: Bumped the value of the __cpp_lib_char8_t feature test macro. * include/bits/fs_path.h (u8path): Modified u8path to accept sequences of char8_t. * include/experimental/bits/fs_path.h (u8path): Modified u8path to accept sequences of char8_t. * include/std/ostream: Added deleted overloads of wchar_t, char8_t, char16_t, and char32_t for ordinary and wide formatted character and string inserters. From-SVN: r278856
Diffstat (limited to 'libstdc++-v3/include/std/ostream')
-rw-r--r--libstdc++-v3/include/std/ostream82
1 files changed, 82 insertions, 0 deletions
diff --git a/libstdc++-v3/include/std/ostream b/libstdc++-v3/include/std/ostream
index 2541d97..771c28d 100644
--- a/libstdc++-v3/include/std/ostream
+++ b/libstdc++-v3/include/std/ostream
@@ -527,6 +527,47 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
inline basic_ostream<char, _Traits>&
operator<<(basic_ostream<char, _Traits>& __out, unsigned char __c)
{ return (__out << static_cast<char>(__c)); }
+
+#if __cplusplus > 201703L
+ // The following deleted overloads prevent formatting character values as
+ // numeric values.
+
+#ifdef _GLIBCXX_USE_WCHAR_T
+ template<class _Traits>
+ basic_ostream<char, _Traits>&
+ operator<<(basic_ostream<char, _Traits>&, wchar_t) = delete;
+#endif // _GLIBCXX_USE_WCHAR_T
+
+#ifdef _GLIBCXX_USE_CHAR8_T
+ template<class _Traits>
+ basic_ostream<char, _Traits>&
+ operator<<(basic_ostream<char, _Traits>&, char8_t) = delete;
+#endif
+
+ template<class _Traits>
+ basic_ostream<char, _Traits>&
+ operator<<(basic_ostream<char, _Traits>&, char16_t) = delete;
+
+ template<class _Traits>
+ basic_ostream<char, _Traits>&
+ operator<<(basic_ostream<char, _Traits>&, char32_t) = delete;
+
+#ifdef _GLIBCXX_USE_WCHAR_T
+#ifdef _GLIBCXX_USE_CHAR8_T
+ template<class _Traits>
+ basic_ostream<wchar_t, _Traits>&
+ operator<<(basic_ostream<wchar_t, _Traits>&, char8_t) = delete;
+#endif // _GLIBCXX_USE_CHAR8_T
+
+ template<class _Traits>
+ basic_ostream<wchar_t, _Traits>&
+ operator<<(basic_ostream<wchar_t, _Traits>&, char16_t) = delete;
+
+ template<class _Traits>
+ basic_ostream<wchar_t, _Traits>&
+ operator<<(basic_ostream<wchar_t, _Traits>&, char32_t) = delete;
+#endif // _GLIBCXX_USE_WCHAR_T
+#endif // C++20
//@}
//@{
@@ -582,6 +623,47 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
inline basic_ostream<char, _Traits> &
operator<<(basic_ostream<char, _Traits>& __out, const unsigned char* __s)
{ return (__out << reinterpret_cast<const char*>(__s)); }
+
+#if __cplusplus > 201703L
+ // The following deleted overloads prevent formatting strings as
+ // pointer values.
+
+#ifdef _GLIBCXX_USE_WCHAR_T
+ template<class _Traits>
+ basic_ostream<char, _Traits>&
+ operator<<(basic_ostream<char, _Traits>&, const wchar_t*) = delete;
+#endif // _GLIBCXX_USE_WCHAR_T
+
+#ifdef _GLIBCXX_USE_CHAR8_T
+ template<class _Traits>
+ basic_ostream<char, _Traits>&
+ operator<<(basic_ostream<char, _Traits>&, const char8_t*) = delete;
+#endif // _GLIBCXX_USE_CHAR8_T
+
+ template<class _Traits>
+ basic_ostream<char, _Traits>&
+ operator<<(basic_ostream<char, _Traits>&, const char16_t*) = delete;
+
+ template<class _Traits>
+ basic_ostream<char, _Traits>&
+ operator<<(basic_ostream<char, _Traits>&, const char32_t*) = delete;
+
+#ifdef _GLIBCXX_USE_WCHAR_T
+#ifdef _GLIBCXX_USE_CHAR8_T
+ template<class _Traits>
+ basic_ostream<wchar_t, _Traits>&
+ operator<<(basic_ostream<wchar_t, _Traits>&, const char8_t*) = delete;
+#endif
+
+ template<class _Traits>
+ basic_ostream<wchar_t, _Traits>&
+ operator<<(basic_ostream<wchar_t, _Traits>&, const char16_t*) = delete;
+
+ template<class _Traits>
+ basic_ostream<wchar_t, _Traits>&
+ operator<<(basic_ostream<wchar_t, _Traits>&, const char32_t*) = delete;
+#endif // _GLIBCXX_USE_WCHAR_T
+#endif // C++20
//@}
// Standard basic_ostream manipulators