[libcxx-dev] Question on how libc++ defines cin and other streams
Louis Dionne via libcxx-dev
libcxx-dev at lists.llvm.org
Wed Nov 28 08:36:38 PST 2018
In src/iostream.cpp, I can find the following beautiful declarations:
_ALIGNAS_TYPE (istream) _LIBCPP_FUNC_VIS char cin[sizeof(istream)]
#if defined(_LIBCPP_ABI_MICROSOFT) && defined(__clang__)
__asm__("?cin@" _LIBCPP_ABI_NAMESPACE_STR "@std@@3V?$basic_istream at DU?$char_traits at D@" _LIBCPP_ABI_NAMESPACE_STR "@std@@@12 at A")
And then we have this a little lower in src/iostream.cpp:
_LIBCPP_HIDDEN ios_base::Init __start_std_streams;
istream* cin_ptr = ::new(cin) istream(::new(__cin) __stdinbuf <char>(stdin, &mb_cin));
I understand we're basically allocating a char array and then placement newing the stream into it during static initialization. However, why is that dance necessary with Clang-on-Windows?
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the libcxx-dev