diff --git a/include/ostream b/include/ostream index f30cfe2..f0e90cf 100644 --- a/include/ostream +++ b/include/ostream @@ -1139,7 +1139,7 @@ operator<<(basic_ostream<_CharT, _Traits>& __os, const bitset<_Size>& __x) std::use_facet >(__os.getloc()).widen('1')); } -#if _LIBCPP_STD_VER >= 20 +#if 0 #ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS template diff --git a/src/iostream.cpp b/src/iostream.cpp index 13e6aee..b0686c9 100644 --- a/src/iostream.cpp +++ b/src/iostream.cpp @@ -21,72 +21,112 @@ _LIBCPP_BEGIN_NAMESPACE_STD +#if defined(_LIBCPP_ABI_MICROSOFT) && !defined(__clang__) +_ALIGNAS_TYPE (istream) char _cin [sizeof(istream)]; +_LIBCPP_EXPORTED_FROM_ABI istream& cin = *reinterpret_cast(_cin); +#else _ALIGNAS_TYPE (istream) _LIBCPP_EXPORTED_FROM_ABI char cin[sizeof(istream)] #if defined(_LIBCPP_ABI_MICROSOFT) && defined(__clang__) __asm__("?cin@" _LIBCPP_ABI_NAMESPACE_STR "@std@@3V?$basic_istream@DU?$char_traits@D@" _LIBCPP_ABI_NAMESPACE_STR "@std@@@12@A") #endif ; +#endif _ALIGNAS_TYPE (__stdinbuf ) static char __cin[sizeof(__stdinbuf )]; static mbstate_t mb_cin; #ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS +#if defined(_LIBCPP_ABI_MICROSOFT) && !defined(__clang__) +_ALIGNAS_TYPE (wistream) char _wcin [sizeof(wistream)]; +_LIBCPP_EXPORTED_FROM_ABI wistream& wcin = *reinterpret_cast(_wcin); +#else _ALIGNAS_TYPE (wistream) _LIBCPP_EXPORTED_FROM_ABI char wcin[sizeof(wistream)] #if defined(_LIBCPP_ABI_MICROSOFT) && defined(__clang__) __asm__("?wcin@" _LIBCPP_ABI_NAMESPACE_STR "@std@@3V?$basic_istream@_WU?$char_traits@_W@" _LIBCPP_ABI_NAMESPACE_STR "@std@@@12@A") #endif ; +#endif _ALIGNAS_TYPE (__stdinbuf ) static char __wcin[sizeof(__stdinbuf )]; static mbstate_t mb_wcin; #endif // _LIBCPP_HAS_NO_WIDE_CHARACTERS +#if defined(_LIBCPP_ABI_MICROSOFT) && !defined(__clang__) +_ALIGNAS_TYPE (ostream) char _cout[sizeof(ostream)]; +_LIBCPP_EXPORTED_FROM_ABI ostream& cout = *reinterpret_cast(_cout); +#else _ALIGNAS_TYPE (ostream) _LIBCPP_EXPORTED_FROM_ABI char cout[sizeof(ostream)] #if defined(_LIBCPP_ABI_MICROSOFT) && defined(__clang__) __asm__("?cout@" _LIBCPP_ABI_NAMESPACE_STR "@std@@3V?$basic_ostream@DU?$char_traits@D@" _LIBCPP_ABI_NAMESPACE_STR "@std@@@12@A") #endif ; +#endif _ALIGNAS_TYPE (__stdoutbuf) static char __cout[sizeof(__stdoutbuf)]; static mbstate_t mb_cout; #ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS +#if defined(_LIBCPP_ABI_MICROSOFT) && !defined(__clang__) +_ALIGNAS_TYPE (wostream) char _wcout[sizeof(wostream)]; +_LIBCPP_EXPORTED_FROM_ABI wostream& wcout = *reinterpret_cast(_wcout); +#else _ALIGNAS_TYPE (wostream) _LIBCPP_EXPORTED_FROM_ABI char wcout[sizeof(wostream)] #if defined(_LIBCPP_ABI_MICROSOFT) && defined(__clang__) __asm__("?wcout@" _LIBCPP_ABI_NAMESPACE_STR "@std@@3V?$basic_ostream@_WU?$char_traits@_W@" _LIBCPP_ABI_NAMESPACE_STR "@std@@@12@A") #endif ; +#endif _ALIGNAS_TYPE (__stdoutbuf) static char __wcout[sizeof(__stdoutbuf)]; static mbstate_t mb_wcout; #endif // _LIBCPP_HAS_NO_WIDE_CHARACTERS +#if defined(_LIBCPP_ABI_MICROSOFT) && !defined(__clang__) +_ALIGNAS_TYPE (ostream) char _cerr[sizeof(ostream)]; +_LIBCPP_EXPORTED_FROM_ABI ostream& cerr = *reinterpret_cast(_cerr); +#else _ALIGNAS_TYPE (ostream) _LIBCPP_EXPORTED_FROM_ABI char cerr[sizeof(ostream)] #if defined(_LIBCPP_ABI_MICROSOFT) && defined(__clang__) __asm__("?cerr@" _LIBCPP_ABI_NAMESPACE_STR "@std@@3V?$basic_ostream@DU?$char_traits@D@" _LIBCPP_ABI_NAMESPACE_STR "@std@@@12@A") #endif ; +#endif _ALIGNAS_TYPE (__stdoutbuf) static char __cerr[sizeof(__stdoutbuf)]; static mbstate_t mb_cerr; #ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS +#if defined(_LIBCPP_ABI_MICROSOFT) && !defined(__clang__) +_ALIGNAS_TYPE (wostream) char _wcerr[sizeof(wostream)]; +_LIBCPP_EXPORTED_FROM_ABI wostream& wcerr = *reinterpret_cast(_wcerr); +#else _ALIGNAS_TYPE (wostream) _LIBCPP_EXPORTED_FROM_ABI char wcerr[sizeof(wostream)] #if defined(_LIBCPP_ABI_MICROSOFT) && defined(__clang__) __asm__("?wcerr@" _LIBCPP_ABI_NAMESPACE_STR "@std@@3V?$basic_ostream@_WU?$char_traits@_W@" _LIBCPP_ABI_NAMESPACE_STR "@std@@@12@A") #endif ; +#endif _ALIGNAS_TYPE (__stdoutbuf) static char __wcerr[sizeof(__stdoutbuf)]; static mbstate_t mb_wcerr; #endif // _LIBCPP_HAS_NO_WIDE_CHARACTERS +#if defined(_LIBCPP_ABI_MICROSOFT) && !defined(__clang__) +_ALIGNAS_TYPE (ostream) char _clog[sizeof(ostream)]; +_LIBCPP_EXPORTED_FROM_ABI ostream& clog = *reinterpret_cast(_clog); +#else _ALIGNAS_TYPE (ostream) _LIBCPP_EXPORTED_FROM_ABI char clog[sizeof(ostream)] #if defined(_LIBCPP_ABI_MICROSOFT) && defined(__clang__) __asm__("?clog@" _LIBCPP_ABI_NAMESPACE_STR "@std@@3V?$basic_ostream@DU?$char_traits@D@" _LIBCPP_ABI_NAMESPACE_STR "@std@@@12@A") #endif ; +#endif #ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS +#if defined(_LIBCPP_ABI_MICROSOFT) && !defined(__clang__) +_ALIGNAS_TYPE (wostream) char _wclog[sizeof(wostream)]; +_LIBCPP_EXPORTED_FROM_ABI wostream& wclog = *reinterpret_cast(_wclog); +#else _ALIGNAS_TYPE (wostream) _LIBCPP_EXPORTED_FROM_ABI char wclog[sizeof(wostream)] #if defined(_LIBCPP_ABI_MICROSOFT) && defined(__clang__) __asm__("?wclog@" _LIBCPP_ABI_NAMESPACE_STR "@std@@3V?$basic_ostream@_WU?$char_traits@_W@" _LIBCPP_ABI_NAMESPACE_STR "@std@@@12@A") #endif ; +#endif #endif // _LIBCPP_HAS_NO_WIDE_CHARACTERS // Pretend we're inside a system header so the compiler doesn't flag the use of the init_priority @@ -121,19 +161,19 @@ DoIOSInit::DoIOSInit() { force_locale_initialization(); - istream* cin_ptr = ::new(cin) istream(::new(__cin) __stdinbuf (stdin, &mb_cin)); - ostream* cout_ptr = ::new(cout) ostream(::new(__cout) __stdoutbuf(stdout, &mb_cout)); - ostream* cerr_ptr = ::new(cerr) ostream(::new(__cerr) __stdoutbuf(stderr, &mb_cerr)); - ::new(clog) ostream(cerr_ptr->rdbuf()); + istream* cin_ptr = ::new(&cin) istream(::new(__cin) __stdinbuf (stdin, &mb_cin)); + ostream* cout_ptr = ::new(&cout) ostream(::new(__cout) __stdoutbuf(stdout, &mb_cout)); + ostream* cerr_ptr = ::new(&cerr) ostream(::new(__cerr) __stdoutbuf(stderr, &mb_cerr)); + ::new(&clog) ostream(cerr_ptr->rdbuf()); cin_ptr->tie(cout_ptr); _VSTD::unitbuf(*cerr_ptr); cerr_ptr->tie(cout_ptr); #ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS - wistream* wcin_ptr = ::new(wcin) wistream(::new(__wcin) __stdinbuf (stdin, &mb_wcin)); - wostream* wcout_ptr = ::new(wcout) wostream(::new(__wcout) __stdoutbuf(stdout, &mb_wcout)); - wostream* wcerr_ptr = ::new(wcerr) wostream(::new(__wcerr) __stdoutbuf(stderr, &mb_wcerr)); - ::new(wclog) wostream(wcerr_ptr->rdbuf()); + wistream* wcin_ptr = ::new(&wcin) wistream(::new(__wcin) __stdinbuf (stdin, &mb_wcin)); + wostream* wcout_ptr = ::new(&wcout) wostream(::new(__wcout) __stdoutbuf(stdout, &mb_wcout)); + wostream* wcerr_ptr = ::new(&wcerr) wostream(::new(__wcerr) __stdoutbuf(stderr, &mb_wcerr)); + ::new(&wclog) wostream(wcerr_ptr->rdbuf()); wcin_ptr->tie(wcout_ptr); _VSTD::unitbuf(*wcerr_ptr); @@ -143,15 +183,15 @@ DoIOSInit::DoIOSInit() DoIOSInit::~DoIOSInit() { - ostream* cout_ptr = reinterpret_cast(cout); + ostream* cout_ptr = reinterpret_cast(&cout); cout_ptr->flush(); - ostream* clog_ptr = reinterpret_cast(clog); + ostream* clog_ptr = reinterpret_cast(&clog); clog_ptr->flush(); #ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS - wostream* wcout_ptr = reinterpret_cast(wcout); + wostream* wcout_ptr = reinterpret_cast(&wcout); wcout_ptr->flush(); - wostream* wclog_ptr = reinterpret_cast(wclog); + wostream* wclog_ptr = reinterpret_cast(&wclog); wclog_ptr->flush(); #endif }