Skip to content

Commit 4d24407

Browse files
authored
[libc++][C++03] cherry-pick #101889 (#157881)
1 parent 5539daf commit 4d24407

File tree

26 files changed

+46
-80
lines changed

26 files changed

+46
-80
lines changed

libcxx/include/__cxx03/fstream

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,7 @@ typedef basic_fstream<wchar_t> wfstream;
191191
#include <__cxx03/__config>
192192
#include <__cxx03/__fwd/fstream.h>
193193
#include <__cxx03/__locale>
194+
#include <__cxx03/__memory/addressof.h>
194195
#include <__cxx03/__type_traits/enable_if.h>
195196
#include <__cxx03/__type_traits/is_same.h>
196197
#include <__cxx03/__utility/move.h>
@@ -1062,35 +1063,37 @@ private:
10621063
};
10631064

10641065
template <class _CharT, class _Traits>
1065-
inline basic_ifstream<_CharT, _Traits>::basic_ifstream() : basic_istream<char_type, traits_type>(&__sb_) {}
1066+
inline basic_ifstream<_CharT, _Traits>::basic_ifstream()
1067+
: basic_istream<char_type, traits_type>(std::addressof(__sb_)) {}
10661068

10671069
template <class _CharT, class _Traits>
10681070
inline basic_ifstream<_CharT, _Traits>::basic_ifstream(const char* __s, ios_base::openmode __mode)
1069-
: basic_istream<char_type, traits_type>(&__sb_) {
1071+
: basic_istream<char_type, traits_type>(std::addressof(__sb_)) {
10701072
if (__sb_.open(__s, __mode | ios_base::in) == nullptr)
10711073
this->setstate(ios_base::failbit);
10721074
}
10731075

10741076
# ifdef _LIBCPP_HAS_OPEN_WITH_WCHAR
10751077
template <class _CharT, class _Traits>
10761078
inline basic_ifstream<_CharT, _Traits>::basic_ifstream(const wchar_t* __s, ios_base::openmode __mode)
1077-
: basic_istream<char_type, traits_type>(&__sb_) {
1079+
: basic_istream<char_type, traits_type>(std::addressof(__sb_)) {
10781080
if (__sb_.open(__s, __mode | ios_base::in) == nullptr)
10791081
this->setstate(ios_base::failbit);
10801082
}
10811083
# endif
10821084

1085+
// extension
10831086
template <class _CharT, class _Traits>
10841087
inline basic_ifstream<_CharT, _Traits>::basic_ifstream(const string& __s, ios_base::openmode __mode)
1085-
: basic_istream<char_type, traits_type>(&__sb_) {
1088+
: basic_istream<char_type, traits_type>(std::addressof(__sb_)) {
10861089
if (__sb_.open(__s, __mode | ios_base::in) == nullptr)
10871090
this->setstate(ios_base::failbit);
10881091
}
10891092

10901093
template <class _CharT, class _Traits>
10911094
inline basic_ifstream<_CharT, _Traits>::basic_ifstream(basic_ifstream&& __rhs)
10921095
: basic_istream<char_type, traits_type>(std::move(__rhs)), __sb_(std::move(__rhs.__sb_)) {
1093-
this->set_rdbuf(&__sb_);
1096+
this->set_rdbuf(std::addressof(__sb_));
10941097
}
10951098

10961099
template <class _CharT, class _Traits>
@@ -1113,7 +1116,7 @@ inline _LIBCPP_HIDE_FROM_ABI void swap(basic_ifstream<_CharT, _Traits>& __x, bas
11131116

11141117
template <class _CharT, class _Traits>
11151118
inline basic_filebuf<_CharT, _Traits>* basic_ifstream<_CharT, _Traits>::rdbuf() const {
1116-
return const_cast<basic_filebuf<char_type, traits_type>*>(&__sb_);
1119+
return const_cast<basic_filebuf<char_type, traits_type>*>(std::addressof(__sb_));
11171120
}
11181121

11191122
template <class _CharT, class _Traits>
@@ -1199,35 +1202,37 @@ private:
11991202
};
12001203

12011204
template <class _CharT, class _Traits>
1202-
inline basic_ofstream<_CharT, _Traits>::basic_ofstream() : basic_ostream<char_type, traits_type>(&__sb_) {}
1205+
inline basic_ofstream<_CharT, _Traits>::basic_ofstream()
1206+
: basic_ostream<char_type, traits_type>(std::addressof(__sb_)) {}
12031207

12041208
template <class _CharT, class _Traits>
12051209
inline basic_ofstream<_CharT, _Traits>::basic_ofstream(const char* __s, ios_base::openmode __mode)
1206-
: basic_ostream<char_type, traits_type>(&__sb_) {
1210+
: basic_ostream<char_type, traits_type>(std::addressof(__sb_)) {
12071211
if (__sb_.open(__s, __mode | ios_base::out) == nullptr)
12081212
this->setstate(ios_base::failbit);
12091213
}
12101214

12111215
# ifdef _LIBCPP_HAS_OPEN_WITH_WCHAR
12121216
template <class _CharT, class _Traits>
12131217
inline basic_ofstream<_CharT, _Traits>::basic_ofstream(const wchar_t* __s, ios_base::openmode __mode)
1214-
: basic_ostream<char_type, traits_type>(&__sb_) {
1218+
: basic_ostream<char_type, traits_type>(std::addressof(__sb_)) {
12151219
if (__sb_.open(__s, __mode | ios_base::out) == nullptr)
12161220
this->setstate(ios_base::failbit);
12171221
}
12181222
# endif
12191223

1224+
// extension
12201225
template <class _CharT, class _Traits>
12211226
inline basic_ofstream<_CharT, _Traits>::basic_ofstream(const string& __s, ios_base::openmode __mode)
1222-
: basic_ostream<char_type, traits_type>(&__sb_) {
1227+
: basic_ostream<char_type, traits_type>(std::addressof(__sb_)) {
12231228
if (__sb_.open(__s, __mode | ios_base::out) == nullptr)
12241229
this->setstate(ios_base::failbit);
12251230
}
12261231

12271232
template <class _CharT, class _Traits>
12281233
inline basic_ofstream<_CharT, _Traits>::basic_ofstream(basic_ofstream&& __rhs)
12291234
: basic_ostream<char_type, traits_type>(std::move(__rhs)), __sb_(std::move(__rhs.__sb_)) {
1230-
this->set_rdbuf(&__sb_);
1235+
this->set_rdbuf(std::addressof(__sb_));
12311236
}
12321237

12331238
template <class _CharT, class _Traits>
@@ -1250,7 +1255,7 @@ inline _LIBCPP_HIDE_FROM_ABI void swap(basic_ofstream<_CharT, _Traits>& __x, bas
12501255

12511256
template <class _CharT, class _Traits>
12521257
inline basic_filebuf<_CharT, _Traits>* basic_ofstream<_CharT, _Traits>::rdbuf() const {
1253-
return const_cast<basic_filebuf<char_type, traits_type>*>(&__sb_);
1258+
return const_cast<basic_filebuf<char_type, traits_type>*>(std::addressof(__sb_));
12541259
}
12551260

12561261
template <class _CharT, class _Traits>
@@ -1340,35 +1345,37 @@ private:
13401345
};
13411346

13421347
template <class _CharT, class _Traits>
1343-
inline basic_fstream<_CharT, _Traits>::basic_fstream() : basic_iostream<char_type, traits_type>(&__sb_) {}
1348+
inline basic_fstream<_CharT, _Traits>::basic_fstream()
1349+
: basic_iostream<char_type, traits_type>(std::addressof(__sb_)) {}
13441350

13451351
template <class _CharT, class _Traits>
13461352
inline basic_fstream<_CharT, _Traits>::basic_fstream(const char* __s, ios_base::openmode __mode)
1347-
: basic_iostream<char_type, traits_type>(&__sb_) {
1353+
: basic_iostream<char_type, traits_type>(std::addressof(__sb_)) {
13481354
if (__sb_.open(__s, __mode) == nullptr)
13491355
this->setstate(ios_base::failbit);
13501356
}
13511357

13521358
# ifdef _LIBCPP_HAS_OPEN_WITH_WCHAR
13531359
template <class _CharT, class _Traits>
13541360
inline basic_fstream<_CharT, _Traits>::basic_fstream(const wchar_t* __s, ios_base::openmode __mode)
1355-
: basic_iostream<char_type, traits_type>(&__sb_) {
1361+
: basic_iostream<char_type, traits_type>(std::addressof(__sb_)) {
13561362
if (__sb_.open(__s, __mode) == nullptr)
13571363
this->setstate(ios_base::failbit);
13581364
}
13591365
# endif
13601366

13611367
template <class _CharT, class _Traits>
13621368
inline basic_fstream<_CharT, _Traits>::basic_fstream(const string& __s, ios_base::openmode __mode)
1363-
: basic_iostream<char_type, traits_type>(&__sb_) {
1369+
: basic_iostream<char_type, traits_type>(std::addressof(__sb_)) {
13641370
if (__sb_.open(__s, __mode) == nullptr)
13651371
this->setstate(ios_base::failbit);
13661372
}
13671373

1374+
// extension
13681375
template <class _CharT, class _Traits>
13691376
inline basic_fstream<_CharT, _Traits>::basic_fstream(basic_fstream&& __rhs)
13701377
: basic_iostream<char_type, traits_type>(std::move(__rhs)), __sb_(std::move(__rhs.__sb_)) {
1371-
this->set_rdbuf(&__sb_);
1378+
this->set_rdbuf(std::addressof(__sb_));
13721379
}
13731380

13741381
template <class _CharT, class _Traits>
@@ -1391,7 +1398,7 @@ inline _LIBCPP_HIDE_FROM_ABI void swap(basic_fstream<_CharT, _Traits>& __x, basi
13911398

13921399
template <class _CharT, class _Traits>
13931400
inline basic_filebuf<_CharT, _Traits>* basic_fstream<_CharT, _Traits>::rdbuf() const {
1394-
return const_cast<basic_filebuf<char_type, traits_type>*>(&__sb_);
1401+
return const_cast<basic_filebuf<char_type, traits_type>*>(std::addressof(__sb_));
13951402
}
13961403

13971404
template <class _CharT, class _Traits>

libcxx/include/__cxx03/ios

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,7 @@ storage-class-specifier const error_category& iostream_category() noexcept;
218218
# include <__cxx03/__fwd/ios.h>
219219
# include <__cxx03/__ios/fpos.h>
220220
# include <__cxx03/__locale>
221+
# include <__cxx03/__memory/addressof.h>
221222
# include <__cxx03/__system_error/error_category.h>
222223
# include <__cxx03/__system_error/error_code.h>
223224
# include <__cxx03/__system_error/error_condition.h>
@@ -696,7 +697,7 @@ inline _LIBCPP_HIDE_FROM_ABI _CharT basic_ios<_CharT, _Traits>::fill(char_type _
696697

697698
template <class _CharT, class _Traits>
698699
basic_ios<_CharT, _Traits>& basic_ios<_CharT, _Traits>::copyfmt(const basic_ios& __rhs) {
699-
if (this != &__rhs) {
700+
if (this != std::addressof(__rhs)) {
700701
__call_callbacks(erase_event);
701702
ios_base::copyfmt(__rhs);
702703
__tie_ = __rhs.__tie_;

libcxx/include/__cxx03/sstream

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -713,18 +713,19 @@ private:
713713

714714
public:
715715
// [istringstream.cons] Constructors:
716-
_LIBCPP_HIDE_FROM_ABI basic_istringstream() : basic_istream<_CharT, _Traits>(&__sb_), __sb_(ios_base::in) {}
716+
_LIBCPP_HIDE_FROM_ABI basic_istringstream()
717+
: basic_istream<_CharT, _Traits>(std::addressof(__sb_)), __sb_(ios_base::in) {}
717718

718719
_LIBCPP_HIDE_FROM_ABI explicit basic_istringstream(ios_base::openmode __wch)
719-
: basic_istream<_CharT, _Traits>(&__sb_), __sb_(__wch | ios_base::in) {}
720+
: basic_istream<_CharT, _Traits>(std::addressof(__sb_)), __sb_(__wch | ios_base::in) {}
720721

721722
_LIBCPP_HIDE_FROM_ABI explicit basic_istringstream(const string_type& __s, ios_base::openmode __wch = ios_base::in)
722-
: basic_istream<_CharT, _Traits>(&__sb_), __sb_(__s, __wch | ios_base::in) {}
723+
: basic_istream<_CharT, _Traits>(std::addressof(__sb_)), __sb_(__s, __wch | ios_base::in) {}
723724

724725
basic_istringstream(const basic_istringstream&) = delete;
725726
_LIBCPP_HIDE_FROM_ABI basic_istringstream(basic_istringstream&& __rhs)
726727
: basic_istream<_CharT, _Traits>(std::move(__rhs)), __sb_(std::move(__rhs.__sb_)) {
727-
basic_istream<_CharT, _Traits>::set_rdbuf(&__sb_);
728+
basic_istream<_CharT, _Traits>::set_rdbuf(std::addressof(__sb_));
728729
}
729730

730731
// [istringstream.assign] Assign and swap:
@@ -741,7 +742,7 @@ public:
741742

742743
// [istringstream.members] Member functions:
743744
_LIBCPP_HIDE_FROM_ABI basic_stringbuf<char_type, traits_type, allocator_type>* rdbuf() const {
744-
return const_cast<basic_stringbuf<char_type, traits_type, allocator_type>*>(&__sb_);
745+
return const_cast<basic_stringbuf<char_type, traits_type, allocator_type>*>(std::addressof(__sb_));
745746
}
746747

747748
_LIBCPP_HIDE_FROM_ABI string_type str() const { return __sb_.str(); }
@@ -774,18 +775,19 @@ private:
774775

775776
public:
776777
// [ostringstream.cons] Constructors:
777-
_LIBCPP_HIDE_FROM_ABI basic_ostringstream() : basic_ostream<_CharT, _Traits>(&__sb_), __sb_(ios_base::out) {}
778+
_LIBCPP_HIDE_FROM_ABI basic_ostringstream()
779+
: basic_ostream<_CharT, _Traits>(std::addressof(__sb_)), __sb_(ios_base::out) {}
778780

779781
_LIBCPP_HIDE_FROM_ABI explicit basic_ostringstream(ios_base::openmode __wch)
780-
: basic_ostream<_CharT, _Traits>(&__sb_), __sb_(__wch | ios_base::out) {}
782+
: basic_ostream<_CharT, _Traits>(std::addressof(__sb_)), __sb_(__wch | ios_base::out) {}
781783

782784
_LIBCPP_HIDE_FROM_ABI explicit basic_ostringstream(const string_type& __s, ios_base::openmode __wch = ios_base::out)
783-
: basic_ostream<_CharT, _Traits>(&__sb_), __sb_(__s, __wch | ios_base::out) {}
785+
: basic_ostream<_CharT, _Traits>(std::addressof(__sb_)), __sb_(__s, __wch | ios_base::out) {}
784786

785787
basic_ostringstream(const basic_ostringstream&) = delete;
786788
_LIBCPP_HIDE_FROM_ABI basic_ostringstream(basic_ostringstream&& __rhs)
787789
: basic_ostream<_CharT, _Traits>(std::move(__rhs)), __sb_(std::move(__rhs.__sb_)) {
788-
basic_ostream<_CharT, _Traits>::set_rdbuf(&__sb_);
790+
basic_ostream<_CharT, _Traits>::set_rdbuf(std::addressof(__sb_));
789791
}
790792

791793
// [ostringstream.assign] Assign and swap:
@@ -803,7 +805,7 @@ public:
803805

804806
// [ostringstream.members] Member functions:
805807
_LIBCPP_HIDE_FROM_ABI basic_stringbuf<char_type, traits_type, allocator_type>* rdbuf() const {
806-
return const_cast<basic_stringbuf<char_type, traits_type, allocator_type>*>(&__sb_);
808+
return const_cast<basic_stringbuf<char_type, traits_type, allocator_type>*>(std::addressof(__sb_));
807809
}
808810

809811
_LIBCPP_HIDE_FROM_ABI string_type str() const { return __sb_.str(); }
@@ -836,19 +838,19 @@ private:
836838
public:
837839
// [stringstream.cons] constructors
838840
_LIBCPP_HIDE_FROM_ABI basic_stringstream()
839-
: basic_iostream<_CharT, _Traits>(&__sb_), __sb_(ios_base::in | ios_base::out) {}
841+
: basic_iostream<_CharT, _Traits>(std::addressof(__sb_)), __sb_(ios_base::in | ios_base::out) {}
840842

841843
_LIBCPP_HIDE_FROM_ABI explicit basic_stringstream(ios_base::openmode __wch)
842-
: basic_iostream<_CharT, _Traits>(&__sb_), __sb_(__wch) {}
844+
: basic_iostream<_CharT, _Traits>(std::addressof(__sb_)), __sb_(__wch) {}
843845

844846
_LIBCPP_HIDE_FROM_ABI explicit basic_stringstream(const string_type& __s,
845847
ios_base::openmode __wch = ios_base::in | ios_base::out)
846-
: basic_iostream<_CharT, _Traits>(&__sb_), __sb_(__s, __wch) {}
848+
: basic_iostream<_CharT, _Traits>(std::addressof(__sb_)), __sb_(__s, __wch) {}
847849

848850
basic_stringstream(const basic_stringstream&) = delete;
849851
_LIBCPP_HIDE_FROM_ABI basic_stringstream(basic_stringstream&& __rhs)
850852
: basic_iostream<_CharT, _Traits>(std::move(__rhs)), __sb_(std::move(__rhs.__sb_)) {
851-
basic_istream<_CharT, _Traits>::set_rdbuf(&__sb_);
853+
basic_istream<_CharT, _Traits>::set_rdbuf(std::addressof(__sb_));
852854
}
853855

854856
// [stringstream.assign] Assign and swap:
@@ -865,7 +867,7 @@ public:
865867

866868
// [stringstream.members] Member functions:
867869
_LIBCPP_HIDE_FROM_ABI basic_stringbuf<char_type, traits_type, allocator_type>* rdbuf() const {
868-
return const_cast<basic_stringbuf<char_type, traits_type, allocator_type>*>(&__sb_);
870+
return const_cast<basic_stringbuf<char_type, traits_type, allocator_type>*>(std::addressof(__sb_));
869871
}
870872

871873
_LIBCPP_HIDE_FROM_ABI string_type str() const { return __sb_.str(); }

libcxx/include/__cxx03/string

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2866,13 +2866,13 @@ inline void basic_string<_CharT, _Traits, _Allocator>::swap(basic_string& __str)
28662866
"swapping non-equal allocators");
28672867
if (!__is_long())
28682868
__annotate_delete();
2869-
if (this != &__str && !__str.__is_long())
2869+
if (this != std::addressof(__str) && !__str.__is_long())
28702870
__str.__annotate_delete();
28712871
std::swap(__r_.first(), __str.__r_.first());
28722872
std::__swap_allocator(__alloc(), __str.__alloc());
28732873
if (!__is_long())
28742874
__annotate_new(__get_short_size());
2875-
if (this != &__str && !__str.__is_long())
2875+
if (this != std::addressof(__str) && !__str.__is_long())
28762876
__str.__annotate_new(__str.__get_short_size());
28772877
}
28782878

libcxx/test/std/input.output/file.streams/fstreams/fstream.cons/default.pass.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@
1313

1414
// basic_fstream();
1515

16-
// XFAIL: FROZEN-CXX03-HEADERS-FIXME
17-
1816
#include <fstream>
1917

2018
#include "test_macros.h"

libcxx/test/std/input.output/file.streams/fstreams/fstream.cons/move.pass.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@
1313

1414
// basic_fstream(basic_fstream&& rhs);
1515

16-
// XFAIL: FROZEN-CXX03-HEADERS-FIXME
17-
1816
#include <fstream>
1917
#include <cassert>
2018

libcxx/test/std/input.output/file.streams/fstreams/fstream.cons/pointer.pass.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@
1818

1919
// XFAIL: LIBCXX-AIX-FIXME
2020

21-
// XFAIL: FROZEN-CXX03-HEADERS-FIXME
22-
2321
#include <fstream>
2422
#include <cassert>
2523

libcxx/test/std/input.output/file.streams/fstreams/fstream.cons/string.pass.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@
1313

1414
// explicit basic_fstream(const string& s, ios_base::openmode mode = ios_base::in|ios_base::out);
1515

16-
// XFAIL: FROZEN-CXX03-HEADERS-FIXME
17-
1816
#include <fstream>
1917
#include <cassert>
2018

libcxx/test/std/input.output/file.streams/fstreams/ifstream.cons/default.pass.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@
1313

1414
// basic_ifstream();
1515

16-
// XFAIL: FROZEN-CXX03-HEADERS-FIXME
17-
1816
#include <fstream>
1917

2018
#include "test_macros.h"

libcxx/test/std/input.output/file.streams/fstreams/ifstream.cons/move.pass.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@
88

99
// FILE_DEPENDENCIES: test.dat
1010

11-
// XFAIL: FROZEN-CXX03-HEADERS-FIXME
12-
1311
// <fstream>
1412

1513
// template <class charT, class traits = char_traits<charT> >

0 commit comments

Comments
 (0)