https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88812
Bug ID: 88812 Summary: Implement C++20 LWG 2499/P0487R1 - Fixing operator>>(basic_istream&, CharT*) Product: gcc Version: unknown Status: UNCONFIRMED Severity: enhancement Priority: P3 Component: libstdc++ Assignee: unassigned at gcc dot gnu.org Reporter: emsr at gcc dot gnu.org Target Milestone: --- http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2018/p0487r1.html TL;DR Just like deletion of gets() the operator>>(char* str) need to be replaced by ones that take sized buffers: #if __cplusplus > 201703L // Not in LWG2499/P0487R1 template<std::size_t _Num> basic_istream<char>& operator>>(basic_istream<char>& __in, char (&__s)[_Num]); template<typename _Traits, std::size_t _Num> inline basic_istream<char, _Traits>& operator>>(basic_istream<char, _Traits>& __in, unsigned char (&__s)[_Num]) { return (__in >> reinterpret_cast<char*>(__s)); } template<typename _Traits, std::size_t _Num> inline basic_istream<char, _Traits>& operator>>(basic_istream<char, _Traits>& __in, signed char (&__s)[_Num]) { return (__in >> reinterpret_cast<char*>(__s)); } #endif No, I don't have a complete patch. We'll need to figure out migration deprecation strategies, ABI compatibility (keep old sigs in istream.cc, just don't declare publicly?).