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

Howard Hinnant via cfe-dev cfe-dev at lists.llvm.org
Mon May 16 12:54:14 PDT 2016


On May 16, 2016, at 2:12 PM, Yi-Hong Lyu via cfe-dev <cfe-dev at lists.llvm.org> wrote:
> 
> 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,

This was done because the standard forbids the destruction of these objects in the atexit chain.

Howard


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: Message signed with OpenPGP using GPGMail
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20160516/63996ae3/attachment.sig>


More information about the cfe-dev mailing list