From 08bfae34e752abd6db86dd0ff0659c714fda19ae Mon Sep 17 00:00:00 2001 From: Chris Thrasher Date: Mon, 20 Jan 2025 00:09:28 -0700 Subject: [PATCH] Fix build errors when compiling in C++20 mode C++20 removes the ability to stream char32_t characters. This is the error I get when setting CMAKE_CXX_STANDARD to 20. /Users/thrasher/Projects/sfml/test/System/String.test.cpp:32:52: error: overload resolution selected deleted operator '<<' 32 | stream << "[\\x" << std::uppercase << std::hex << character << ']'; | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ ~~~~~~~~~ /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.2.sdk/usr/include/c++/v1/ostream:1009:31: note: candidate function [with _Traits = std::char_traits] has been explicitly deleted 1009 | basic_ostream& operator<<(basic_ostream&, char32_t) = delete; | ^ --- examples/keyboard/Keyboard.cpp | 2 +- test/System/String.test.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/keyboard/Keyboard.cpp b/examples/keyboard/Keyboard.cpp index ae6fa641d..a1155e607 100644 --- a/examples/keyboard/Keyboard.cpp +++ b/examples/keyboard/Keyboard.cpp @@ -734,7 +734,7 @@ sf::String textEventDescription(const sf::Event::TextEntered& textEntered) text += "\nU+"; std::ostringstream oss; - oss << std::hex << std::setw(4) << std::setfill('0') << textEntered.unicode; + oss << std::hex << std::setw(4) << std::setfill('0') << std::uint32_t{textEntered.unicode}; text += oss.str(); return text; diff --git a/test/System/String.test.cpp b/test/System/String.test.cpp index e505b79dd..996f03b7d 100644 --- a/test/System/String.test.cpp +++ b/test/System/String.test.cpp @@ -29,7 +29,7 @@ auto select(const std::basic_string& string16, const std::basic_string& st auto toHex(const char32_t character) { std::ostringstream stream; - stream << "[\\x" << std::uppercase << std::hex << character << ']'; + stream << "[\\x" << std::uppercase << std::hex << std::uint32_t{character} << ']'; return stream.str(); } } // namespace