[cfe-dev] [libcxx] Why the type of (w)cin/(w)cout/(w)cout are char []?

Yi-Hong Lyu via cfe-dev cfe-dev at lists.llvm.org
Mon May 16 11:12:14 PDT 2016


Hello all,

I am porting libcxx to Windows (not mingw). I am curious about the design
of (w)cin/(w)cout/(w)cout. Currently we define (w)cin/(w)cout/(w)cout as
char[] under src/iostream.cpp and initialise them as istream/ostream in
function ios_base::Init::Init(). Why don't we defined them as
istream/ostream object directly? The drawback of current design in my mind
is that cause linking error under Windows. Windows mangler takes data type
into account. Reference of std::cin would be translated into ?cin at __1@std
@@3V?$basic_istream at DU?$char_traits at D@__1 at std@@@12 at A (class
std::__1::basic_istream<char,struct std::__1::char_traits<char> >
std::__1::cin). Definition of std::cin, in contrast, would be translated
into ?cin at __1@std@@3PADA (char * std::__1::cin). There is a linking error
because two symbols are different.

Any suggestion or comment is appreciated,
Yi-Hong
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20160517/44bde1a6/attachment.html>


More information about the cfe-dev mailing list