Skip to content

Commit 41904da

Browse files
committed
libcxx: see if clang-cl likes this.
Not for review.
1 parent 864f0ff commit 41904da

File tree

2 files changed

+42
-49
lines changed

2 files changed

+42
-49
lines changed

libcxx/include/__ostream/basic_ostream.h

Lines changed: 21 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ class basic_ostream : virtual public basic_ios<_CharT, _Traits> {
7171

7272
public:
7373
// 27.7.2.4 Prefix/suffix:
74-
class sentry;
74+
class _LIBCPP_EXPORTED_FROM_ABI sentry;
7575

7676
// 27.7.2.6 Formatted output:
7777
inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 basic_ostream& operator<<(basic_ostream& (*__pf)(basic_ostream&)) {
@@ -186,37 +186,33 @@ class basic_ostream<_CharT, _Traits>::sentry {
186186
basic_ostream<_CharT, _Traits>& __os_;
187187

188188
public:
189-
explicit sentry(basic_ostream<_CharT, _Traits>& __os);
190-
~sentry();
191-
sentry(const sentry&) = delete;
192-
sentry& operator=(const sentry&) = delete;
193-
194-
_LIBCPP_HIDE_FROM_ABI explicit operator bool() const { return __ok_; }
195-
};
196-
197-
template <class _CharT, class _Traits>
198-
basic_ostream<_CharT, _Traits>::sentry::sentry(basic_ostream<_CharT, _Traits>& __os) : __ok_(false), __os_(__os) {
199-
if (__os.good()) {
200-
if (__os.tie())
201-
__os.tie()->flush();
202-
__ok_ = true;
189+
explicit inline sentry(basic_ostream<_CharT, _Traits>& __os) : __ok_(false), __os_(__os) {
190+
if (__os.good()) {
191+
if (__os.tie())
192+
__os.tie()->flush();
193+
__ok_ = true;
194+
}
203195
}
204-
}
205196

206-
template <class _CharT, class _Traits>
207-
basic_ostream<_CharT, _Traits>::sentry::~sentry() {
208-
if (__os_.rdbuf() && __os_.good() && (__os_.flags() & ios_base::unitbuf) && uncaught_exceptions() == 0) {
197+
inline ~sentry() {
198+
if (__os_.rdbuf() && __os_.good() && (__os_.flags() & ios_base::unitbuf) && uncaught_exceptions() == 0) {
209199
# if _LIBCPP_HAS_EXCEPTIONS
210-
try {
200+
try {
211201
# endif // _LIBCPP_HAS_EXCEPTIONS
212-
if (__os_.rdbuf()->pubsync() == -1)
213-
__os_.setstate(ios_base::badbit);
202+
if (__os_.rdbuf()->pubsync() == -1)
203+
__os_.setstate(ios_base::badbit);
214204
# if _LIBCPP_HAS_EXCEPTIONS
215-
} catch (...) {
216-
}
205+
} catch (...) {
206+
}
217207
# endif // _LIBCPP_HAS_EXCEPTIONS
208+
}
218209
}
219-
}
210+
211+
sentry(const sentry&) = delete;
212+
sentry& operator=(const sentry&) = delete;
213+
214+
_LIBCPP_HIDE_FROM_ABI explicit inline operator bool() const { return __ok_; }
215+
};
220216

221217
template <class _CharT, class _Traits>
222218
basic_ostream<_CharT, _Traits>::basic_ostream(basic_ostream&& __rhs) {

libcxx/include/istream

Lines changed: 21 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ public:
228228
basic_istream& operator=(const basic_istream& __rhs) = delete;
229229

230230
// 27.7.1.1.3 Prefix/suffix:
231-
class sentry;
231+
class _LIBCPP_EXPORTED_FROM_ABI sentry;
232232

233233
// 27.7.1.2 Formatted input:
234234
inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 basic_istream& operator>>(basic_istream& (*__pf)(basic_istream&)) {
@@ -309,36 +309,33 @@ class basic_istream<_CharT, _Traits>::sentry {
309309
bool __ok_;
310310

311311
public:
312-
explicit sentry(basic_istream<_CharT, _Traits>& __is, bool __noskipws = false);
312+
explicit inline sentry(basic_istream<_CharT, _Traits>& __is, bool __noskipws = false) : __ok_(false) {
313+
if (__is.good()) {
314+
if (__is.tie())
315+
__is.tie()->flush();
316+
if (!__noskipws && (__is.flags() & ios_base::skipws)) {
317+
typedef istreambuf_iterator<_CharT, _Traits> _Ip;
318+
const ctype<_CharT>& __ct = std::use_facet<ctype<_CharT> >(__is.getloc());
319+
_Ip __i(__is);
320+
_Ip __eof;
321+
for (; __i != __eof; ++__i)
322+
if (!__ct.is(__ct.space, *__i))
323+
break;
324+
if (__i == __eof)
325+
__is.setstate(ios_base::failbit | ios_base::eofbit);
326+
}
327+
__ok_ = __is.good();
328+
} else
329+
__is.setstate(ios_base::failbit);
330+
}
313331
// ~sentry() = default;
314332

315-
_LIBCPP_HIDE_FROM_ABI explicit operator bool() const { return __ok_; }
333+
_LIBCPP_HIDE_FROM_ABI explicit inline operator bool() const { return __ok_; }
316334

317335
sentry(const sentry&) = delete;
318336
sentry& operator=(const sentry&) = delete;
319337
};
320338

321-
template <class _CharT, class _Traits>
322-
basic_istream<_CharT, _Traits>::sentry::sentry(basic_istream<_CharT, _Traits>& __is, bool __noskipws) : __ok_(false) {
323-
if (__is.good()) {
324-
if (__is.tie())
325-
__is.tie()->flush();
326-
if (!__noskipws && (__is.flags() & ios_base::skipws)) {
327-
typedef istreambuf_iterator<_CharT, _Traits> _Ip;
328-
const ctype<_CharT>& __ct = std::use_facet<ctype<_CharT> >(__is.getloc());
329-
_Ip __i(__is);
330-
_Ip __eof;
331-
for (; __i != __eof; ++__i)
332-
if (!__ct.is(__ct.space, *__i))
333-
break;
334-
if (__i == __eof)
335-
__is.setstate(ios_base::failbit | ios_base::eofbit);
336-
}
337-
__ok_ = __is.good();
338-
} else
339-
__is.setstate(ios_base::failbit);
340-
}
341-
342339
template <class _CharT, class _Traits>
343340
basic_istream<_CharT, _Traits>::basic_istream(basic_istream&& __rhs) : __gc_(__rhs.__gc_) {
344341
__rhs.__gc_ = 0;

0 commit comments

Comments
 (0)