[libc++][C++03] cherry-pick #101889 (#157881)

This commit is contained in:
Nikolas Klauser 2025-09-12 10:38:37 +02:00 committed by GitHub
parent 5539daf812
commit 4d24407e7d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
26 changed files with 46 additions and 80 deletions

View file

@ -191,6 +191,7 @@ typedef basic_fstream<wchar_t> wfstream;
#include <__cxx03/__config>
#include <__cxx03/__fwd/fstream.h>
#include <__cxx03/__locale>
#include <__cxx03/__memory/addressof.h>
#include <__cxx03/__type_traits/enable_if.h>
#include <__cxx03/__type_traits/is_same.h>
#include <__cxx03/__utility/move.h>
@ -1062,11 +1063,12 @@ private:
};
template <class _CharT, class _Traits>
inline basic_ifstream<_CharT, _Traits>::basic_ifstream() : basic_istream<char_type, traits_type>(&__sb_) {}
inline basic_ifstream<_CharT, _Traits>::basic_ifstream()
: basic_istream<char_type, traits_type>(std::addressof(__sb_)) {}
template <class _CharT, class _Traits>
inline basic_ifstream<_CharT, _Traits>::basic_ifstream(const char* __s, ios_base::openmode __mode)
: basic_istream<char_type, traits_type>(&__sb_) {
: basic_istream<char_type, traits_type>(std::addressof(__sb_)) {
if (__sb_.open(__s, __mode | ios_base::in) == nullptr)
this->setstate(ios_base::failbit);
}
@ -1074,15 +1076,16 @@ inline basic_ifstream<_CharT, _Traits>::basic_ifstream(const char* __s, ios_base
# ifdef _LIBCPP_HAS_OPEN_WITH_WCHAR
template <class _CharT, class _Traits>
inline basic_ifstream<_CharT, _Traits>::basic_ifstream(const wchar_t* __s, ios_base::openmode __mode)
: basic_istream<char_type, traits_type>(&__sb_) {
: basic_istream<char_type, traits_type>(std::addressof(__sb_)) {
if (__sb_.open(__s, __mode | ios_base::in) == nullptr)
this->setstate(ios_base::failbit);
}
# endif
// extension
template <class _CharT, class _Traits>
inline basic_ifstream<_CharT, _Traits>::basic_ifstream(const string& __s, ios_base::openmode __mode)
: basic_istream<char_type, traits_type>(&__sb_) {
: basic_istream<char_type, traits_type>(std::addressof(__sb_)) {
if (__sb_.open(__s, __mode | ios_base::in) == nullptr)
this->setstate(ios_base::failbit);
}
@ -1090,7 +1093,7 @@ inline basic_ifstream<_CharT, _Traits>::basic_ifstream(const string& __s, ios_ba
template <class _CharT, class _Traits>
inline basic_ifstream<_CharT, _Traits>::basic_ifstream(basic_ifstream&& __rhs)
: basic_istream<char_type, traits_type>(std::move(__rhs)), __sb_(std::move(__rhs.__sb_)) {
this->set_rdbuf(&__sb_);
this->set_rdbuf(std::addressof(__sb_));
}
template <class _CharT, class _Traits>
@ -1113,7 +1116,7 @@ inline _LIBCPP_HIDE_FROM_ABI void swap(basic_ifstream<_CharT, _Traits>& __x, bas
template <class _CharT, class _Traits>
inline basic_filebuf<_CharT, _Traits>* basic_ifstream<_CharT, _Traits>::rdbuf() const {
return const_cast<basic_filebuf<char_type, traits_type>*>(&__sb_);
return const_cast<basic_filebuf<char_type, traits_type>*>(std::addressof(__sb_));
}
template <class _CharT, class _Traits>
@ -1199,11 +1202,12 @@ private:
};
template <class _CharT, class _Traits>
inline basic_ofstream<_CharT, _Traits>::basic_ofstream() : basic_ostream<char_type, traits_type>(&__sb_) {}
inline basic_ofstream<_CharT, _Traits>::basic_ofstream()
: basic_ostream<char_type, traits_type>(std::addressof(__sb_)) {}
template <class _CharT, class _Traits>
inline basic_ofstream<_CharT, _Traits>::basic_ofstream(const char* __s, ios_base::openmode __mode)
: basic_ostream<char_type, traits_type>(&__sb_) {
: basic_ostream<char_type, traits_type>(std::addressof(__sb_)) {
if (__sb_.open(__s, __mode | ios_base::out) == nullptr)
this->setstate(ios_base::failbit);
}
@ -1211,15 +1215,16 @@ inline basic_ofstream<_CharT, _Traits>::basic_ofstream(const char* __s, ios_base
# ifdef _LIBCPP_HAS_OPEN_WITH_WCHAR
template <class _CharT, class _Traits>
inline basic_ofstream<_CharT, _Traits>::basic_ofstream(const wchar_t* __s, ios_base::openmode __mode)
: basic_ostream<char_type, traits_type>(&__sb_) {
: basic_ostream<char_type, traits_type>(std::addressof(__sb_)) {
if (__sb_.open(__s, __mode | ios_base::out) == nullptr)
this->setstate(ios_base::failbit);
}
# endif
// extension
template <class _CharT, class _Traits>
inline basic_ofstream<_CharT, _Traits>::basic_ofstream(const string& __s, ios_base::openmode __mode)
: basic_ostream<char_type, traits_type>(&__sb_) {
: basic_ostream<char_type, traits_type>(std::addressof(__sb_)) {
if (__sb_.open(__s, __mode | ios_base::out) == nullptr)
this->setstate(ios_base::failbit);
}
@ -1227,7 +1232,7 @@ inline basic_ofstream<_CharT, _Traits>::basic_ofstream(const string& __s, ios_ba
template <class _CharT, class _Traits>
inline basic_ofstream<_CharT, _Traits>::basic_ofstream(basic_ofstream&& __rhs)
: basic_ostream<char_type, traits_type>(std::move(__rhs)), __sb_(std::move(__rhs.__sb_)) {
this->set_rdbuf(&__sb_);
this->set_rdbuf(std::addressof(__sb_));
}
template <class _CharT, class _Traits>
@ -1250,7 +1255,7 @@ inline _LIBCPP_HIDE_FROM_ABI void swap(basic_ofstream<_CharT, _Traits>& __x, bas
template <class _CharT, class _Traits>
inline basic_filebuf<_CharT, _Traits>* basic_ofstream<_CharT, _Traits>::rdbuf() const {
return const_cast<basic_filebuf<char_type, traits_type>*>(&__sb_);
return const_cast<basic_filebuf<char_type, traits_type>*>(std::addressof(__sb_));
}
template <class _CharT, class _Traits>
@ -1340,11 +1345,12 @@ private:
};
template <class _CharT, class _Traits>
inline basic_fstream<_CharT, _Traits>::basic_fstream() : basic_iostream<char_type, traits_type>(&__sb_) {}
inline basic_fstream<_CharT, _Traits>::basic_fstream()
: basic_iostream<char_type, traits_type>(std::addressof(__sb_)) {}
template <class _CharT, class _Traits>
inline basic_fstream<_CharT, _Traits>::basic_fstream(const char* __s, ios_base::openmode __mode)
: basic_iostream<char_type, traits_type>(&__sb_) {
: basic_iostream<char_type, traits_type>(std::addressof(__sb_)) {
if (__sb_.open(__s, __mode) == nullptr)
this->setstate(ios_base::failbit);
}
@ -1352,7 +1358,7 @@ inline basic_fstream<_CharT, _Traits>::basic_fstream(const char* __s, ios_base::
# ifdef _LIBCPP_HAS_OPEN_WITH_WCHAR
template <class _CharT, class _Traits>
inline basic_fstream<_CharT, _Traits>::basic_fstream(const wchar_t* __s, ios_base::openmode __mode)
: basic_iostream<char_type, traits_type>(&__sb_) {
: basic_iostream<char_type, traits_type>(std::addressof(__sb_)) {
if (__sb_.open(__s, __mode) == nullptr)
this->setstate(ios_base::failbit);
}
@ -1360,15 +1366,16 @@ inline basic_fstream<_CharT, _Traits>::basic_fstream(const wchar_t* __s, ios_bas
template <class _CharT, class _Traits>
inline basic_fstream<_CharT, _Traits>::basic_fstream(const string& __s, ios_base::openmode __mode)
: basic_iostream<char_type, traits_type>(&__sb_) {
: basic_iostream<char_type, traits_type>(std::addressof(__sb_)) {
if (__sb_.open(__s, __mode) == nullptr)
this->setstate(ios_base::failbit);
}
// extension
template <class _CharT, class _Traits>
inline basic_fstream<_CharT, _Traits>::basic_fstream(basic_fstream&& __rhs)
: basic_iostream<char_type, traits_type>(std::move(__rhs)), __sb_(std::move(__rhs.__sb_)) {
this->set_rdbuf(&__sb_);
this->set_rdbuf(std::addressof(__sb_));
}
template <class _CharT, class _Traits>
@ -1391,7 +1398,7 @@ inline _LIBCPP_HIDE_FROM_ABI void swap(basic_fstream<_CharT, _Traits>& __x, basi
template <class _CharT, class _Traits>
inline basic_filebuf<_CharT, _Traits>* basic_fstream<_CharT, _Traits>::rdbuf() const {
return const_cast<basic_filebuf<char_type, traits_type>*>(&__sb_);
return const_cast<basic_filebuf<char_type, traits_type>*>(std::addressof(__sb_));
}
template <class _CharT, class _Traits>

View file

@ -218,6 +218,7 @@ storage-class-specifier const error_category& iostream_category() noexcept;
# include <__cxx03/__fwd/ios.h>
# include <__cxx03/__ios/fpos.h>
# include <__cxx03/__locale>
# include <__cxx03/__memory/addressof.h>
# include <__cxx03/__system_error/error_category.h>
# include <__cxx03/__system_error/error_code.h>
# include <__cxx03/__system_error/error_condition.h>
@ -696,7 +697,7 @@ inline _LIBCPP_HIDE_FROM_ABI _CharT basic_ios<_CharT, _Traits>::fill(char_type _
template <class _CharT, class _Traits>
basic_ios<_CharT, _Traits>& basic_ios<_CharT, _Traits>::copyfmt(const basic_ios& __rhs) {
if (this != &__rhs) {
if (this != std::addressof(__rhs)) {
__call_callbacks(erase_event);
ios_base::copyfmt(__rhs);
__tie_ = __rhs.__tie_;

View file

@ -713,18 +713,19 @@ private:
public:
// [istringstream.cons] Constructors:
_LIBCPP_HIDE_FROM_ABI basic_istringstream() : basic_istream<_CharT, _Traits>(&__sb_), __sb_(ios_base::in) {}
_LIBCPP_HIDE_FROM_ABI basic_istringstream()
: basic_istream<_CharT, _Traits>(std::addressof(__sb_)), __sb_(ios_base::in) {}
_LIBCPP_HIDE_FROM_ABI explicit basic_istringstream(ios_base::openmode __wch)
: basic_istream<_CharT, _Traits>(&__sb_), __sb_(__wch | ios_base::in) {}
: basic_istream<_CharT, _Traits>(std::addressof(__sb_)), __sb_(__wch | ios_base::in) {}
_LIBCPP_HIDE_FROM_ABI explicit basic_istringstream(const string_type& __s, ios_base::openmode __wch = ios_base::in)
: basic_istream<_CharT, _Traits>(&__sb_), __sb_(__s, __wch | ios_base::in) {}
: basic_istream<_CharT, _Traits>(std::addressof(__sb_)), __sb_(__s, __wch | ios_base::in) {}
basic_istringstream(const basic_istringstream&) = delete;
_LIBCPP_HIDE_FROM_ABI basic_istringstream(basic_istringstream&& __rhs)
: basic_istream<_CharT, _Traits>(std::move(__rhs)), __sb_(std::move(__rhs.__sb_)) {
basic_istream<_CharT, _Traits>::set_rdbuf(&__sb_);
basic_istream<_CharT, _Traits>::set_rdbuf(std::addressof(__sb_));
}
// [istringstream.assign] Assign and swap:
@ -741,7 +742,7 @@ public:
// [istringstream.members] Member functions:
_LIBCPP_HIDE_FROM_ABI basic_stringbuf<char_type, traits_type, allocator_type>* rdbuf() const {
return const_cast<basic_stringbuf<char_type, traits_type, allocator_type>*>(&__sb_);
return const_cast<basic_stringbuf<char_type, traits_type, allocator_type>*>(std::addressof(__sb_));
}
_LIBCPP_HIDE_FROM_ABI string_type str() const { return __sb_.str(); }
@ -774,18 +775,19 @@ private:
public:
// [ostringstream.cons] Constructors:
_LIBCPP_HIDE_FROM_ABI basic_ostringstream() : basic_ostream<_CharT, _Traits>(&__sb_), __sb_(ios_base::out) {}
_LIBCPP_HIDE_FROM_ABI basic_ostringstream()
: basic_ostream<_CharT, _Traits>(std::addressof(__sb_)), __sb_(ios_base::out) {}
_LIBCPP_HIDE_FROM_ABI explicit basic_ostringstream(ios_base::openmode __wch)
: basic_ostream<_CharT, _Traits>(&__sb_), __sb_(__wch | ios_base::out) {}
: basic_ostream<_CharT, _Traits>(std::addressof(__sb_)), __sb_(__wch | ios_base::out) {}
_LIBCPP_HIDE_FROM_ABI explicit basic_ostringstream(const string_type& __s, ios_base::openmode __wch = ios_base::out)
: basic_ostream<_CharT, _Traits>(&__sb_), __sb_(__s, __wch | ios_base::out) {}
: basic_ostream<_CharT, _Traits>(std::addressof(__sb_)), __sb_(__s, __wch | ios_base::out) {}
basic_ostringstream(const basic_ostringstream&) = delete;
_LIBCPP_HIDE_FROM_ABI basic_ostringstream(basic_ostringstream&& __rhs)
: basic_ostream<_CharT, _Traits>(std::move(__rhs)), __sb_(std::move(__rhs.__sb_)) {
basic_ostream<_CharT, _Traits>::set_rdbuf(&__sb_);
basic_ostream<_CharT, _Traits>::set_rdbuf(std::addressof(__sb_));
}
// [ostringstream.assign] Assign and swap:
@ -803,7 +805,7 @@ public:
// [ostringstream.members] Member functions:
_LIBCPP_HIDE_FROM_ABI basic_stringbuf<char_type, traits_type, allocator_type>* rdbuf() const {
return const_cast<basic_stringbuf<char_type, traits_type, allocator_type>*>(&__sb_);
return const_cast<basic_stringbuf<char_type, traits_type, allocator_type>*>(std::addressof(__sb_));
}
_LIBCPP_HIDE_FROM_ABI string_type str() const { return __sb_.str(); }
@ -836,19 +838,19 @@ private:
public:
// [stringstream.cons] constructors
_LIBCPP_HIDE_FROM_ABI basic_stringstream()
: basic_iostream<_CharT, _Traits>(&__sb_), __sb_(ios_base::in | ios_base::out) {}
: basic_iostream<_CharT, _Traits>(std::addressof(__sb_)), __sb_(ios_base::in | ios_base::out) {}
_LIBCPP_HIDE_FROM_ABI explicit basic_stringstream(ios_base::openmode __wch)
: basic_iostream<_CharT, _Traits>(&__sb_), __sb_(__wch) {}
: basic_iostream<_CharT, _Traits>(std::addressof(__sb_)), __sb_(__wch) {}
_LIBCPP_HIDE_FROM_ABI explicit basic_stringstream(const string_type& __s,
ios_base::openmode __wch = ios_base::in | ios_base::out)
: basic_iostream<_CharT, _Traits>(&__sb_), __sb_(__s, __wch) {}
: basic_iostream<_CharT, _Traits>(std::addressof(__sb_)), __sb_(__s, __wch) {}
basic_stringstream(const basic_stringstream&) = delete;
_LIBCPP_HIDE_FROM_ABI basic_stringstream(basic_stringstream&& __rhs)
: basic_iostream<_CharT, _Traits>(std::move(__rhs)), __sb_(std::move(__rhs.__sb_)) {
basic_istream<_CharT, _Traits>::set_rdbuf(&__sb_);
basic_istream<_CharT, _Traits>::set_rdbuf(std::addressof(__sb_));
}
// [stringstream.assign] Assign and swap:
@ -865,7 +867,7 @@ public:
// [stringstream.members] Member functions:
_LIBCPP_HIDE_FROM_ABI basic_stringbuf<char_type, traits_type, allocator_type>* rdbuf() const {
return const_cast<basic_stringbuf<char_type, traits_type, allocator_type>*>(&__sb_);
return const_cast<basic_stringbuf<char_type, traits_type, allocator_type>*>(std::addressof(__sb_));
}
_LIBCPP_HIDE_FROM_ABI string_type str() const { return __sb_.str(); }

View file

@ -2866,13 +2866,13 @@ inline void basic_string<_CharT, _Traits, _Allocator>::swap(basic_string& __str)
"swapping non-equal allocators");
if (!__is_long())
__annotate_delete();
if (this != &__str && !__str.__is_long())
if (this != std::addressof(__str) && !__str.__is_long())
__str.__annotate_delete();
std::swap(__r_.first(), __str.__r_.first());
std::__swap_allocator(__alloc(), __str.__alloc());
if (!__is_long())
__annotate_new(__get_short_size());
if (this != &__str && !__str.__is_long())
if (this != std::addressof(__str) && !__str.__is_long())
__str.__annotate_new(__str.__get_short_size());
}

View file

@ -13,8 +13,6 @@
// basic_fstream();
// XFAIL: FROZEN-CXX03-HEADERS-FIXME
#include <fstream>
#include "test_macros.h"

View file

@ -13,8 +13,6 @@
// basic_fstream(basic_fstream&& rhs);
// XFAIL: FROZEN-CXX03-HEADERS-FIXME
#include <fstream>
#include <cassert>

View file

@ -18,8 +18,6 @@
// XFAIL: LIBCXX-AIX-FIXME
// XFAIL: FROZEN-CXX03-HEADERS-FIXME
#include <fstream>
#include <cassert>

View file

@ -13,8 +13,6 @@
// explicit basic_fstream(const string& s, ios_base::openmode mode = ios_base::in|ios_base::out);
// XFAIL: FROZEN-CXX03-HEADERS-FIXME
#include <fstream>
#include <cassert>

View file

@ -13,8 +13,6 @@
// basic_ifstream();
// XFAIL: FROZEN-CXX03-HEADERS-FIXME
#include <fstream>
#include "test_macros.h"

View file

@ -8,8 +8,6 @@
// FILE_DEPENDENCIES: test.dat
// XFAIL: FROZEN-CXX03-HEADERS-FIXME
// <fstream>
// template <class charT, class traits = char_traits<charT> >

View file

@ -8,8 +8,6 @@
// FILE_DEPENDENCIES: test.dat
// XFAIL: FROZEN-CXX03-HEADERS-FIXME
// <fstream>
// template <class charT, class traits = char_traits<charT> >

View file

@ -15,8 +15,6 @@
// explicit basic_ifstream(const string& s, ios_base::openmode mode = ios_base::in);
// XFAIL: FROZEN-CXX03-HEADERS-FIXME
#include <fstream>
#include <cassert>

View file

@ -13,8 +13,6 @@
// basic_ofstream();
// XFAIL: FROZEN-CXX03-HEADERS-FIXME
#include <fstream>
#include "test_macros.h"

View file

@ -13,8 +13,6 @@
// basic_ofstream(basic_ofstream&& rhs);
// XFAIL: FROZEN-CXX03-HEADERS-FIXME
#include <fstream>
#include <cassert>

View file

@ -18,8 +18,6 @@
// XFAIL: LIBCXX-AIX-FIXME
// XFAIL: FROZEN-CXX03-HEADERS-FIXME
#include <fstream>
#include <cassert>
#include <ios>

View file

@ -13,8 +13,6 @@
// explicit basic_ofstream(const string& s, ios_base::openmode mode = ios_base::out);
// XFAIL: FROZEN-CXX03-HEADERS-FIXME
#include <fstream>
#include <cassert>
#include <ios>

View file

@ -15,8 +15,6 @@
// basic_ios& copyfmt(const basic_ios& rhs);
// XFAIL: FROZEN-CXX03-HEADERS-FIXME
#include <ios>
#include <memory>
#include <streambuf>

View file

@ -15,8 +15,6 @@
// basic_istringstream() : basic_istringstream(ios_base::in) {} // C++20
// explicit basic_istringstream(ios_base::openmode which); // C++20
// XFAIL: FROZEN-CXX03-HEADERS-FIXME
#include <sstream>
#include <cassert>

View file

@ -13,8 +13,6 @@
// basic_istringstream(basic_istringstream&& rhs);
// XFAIL: FROZEN-CXX03-HEADERS-FIXME
#include <sstream>
#include <cassert>

View file

@ -14,8 +14,6 @@
// explicit basic_istringstream(const basic_string<charT,traits,allocator>& str,
// ios_base::openmode which = ios_base::in);
// XFAIL: FROZEN-CXX03-HEADERS-FIXME
#include <sstream>
#include <cassert>

View file

@ -15,8 +15,6 @@
// basic_ostringstream() : basic_ostringstream(ios_base::out) {} // C++20
// explicit basic_ostringstream(ios_base::openmode which); // C++20
// XFAIL: FROZEN-CXX03-HEADERS-FIXME
#include <sstream>
#include <cassert>

View file

@ -13,8 +13,6 @@
// basic_ostringstream(basic_ostringstream&& rhs);
// XFAIL: FROZEN-CXX03-HEADERS-FIXME
#include <sstream>
#include <cassert>

View file

@ -14,8 +14,6 @@
// explicit basic_ostringstream(const basic_string<charT,traits,allocator>& str,
// ios_base::openmode which = ios_base::in);
// XFAIL: FROZEN-CXX03-HEADERS-FIXME
#include <sstream>
#include <cassert>

View file

@ -15,8 +15,6 @@
// basic_stringstream() : basic_stringstream(ios_base::out | ios_base::in) {} // C++20
// explicit basic_stringstream(ios_base::openmode which); // C++20
// XFAIL: FROZEN-CXX03-HEADERS-FIXME
#include <sstream>
#include <cassert>

View file

@ -13,8 +13,6 @@
// basic_stringstream(basic_stringstream&& rhs);
// XFAIL: FROZEN-CXX03-HEADERS-FIXME
#include <sstream>
#include <cassert>

View file

@ -14,8 +14,6 @@
// explicit basic_stringstream(const basic_string<charT,traits,Allocator>& str,
// ios_base::openmode which = ios_base::out|ios_base::in);
// XFAIL: FROZEN-CXX03-HEADERS-FIXME
#include <sstream>
#include <cassert>