stdcxx-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Farid Zaripov" <Farid_Zari...@epam.com>
Subject RE: ios_bits.cpp and MSVC
Date Fri, 26 Oct 2007 16:20:43 GMT
> -----Original Message-----
> From: Martin Sebor [mailto:sebor@roguewave.com] 
> Sent: Friday, October 26, 2007 2:59 AM
> To: stdcxx-dev@incubator.apache.org
> Subject: RE: ios_bits.cpp and MSVC
> 
> 
> 
> Farid Zaripov-2 wrote:
> > 
> > [...]
> >> http://issues.apache.org/jira/browse/STDCXX-613
> > 
> >   This bug avoided in _defs.h:
> > 
> > _defs.h, line 1020:
> > -----------
> > #  ifndef _RWSTD_NO_STATIC_CONST_MEMBER_DEFINITION
> > #    define _RWSTD_DEFINE_STATIC_CONST(decl)   decl
> > #  else   // if defined (_RWSTD_NO_STATIC_CONST_MEMBER_DEFINITION)
> >      // disable defintion of static const integral members
> >      // to work around compiler bugs such as those in MSVC
> >      // or Intel C++/Windows that cause multiple definition
> >      // linker errors (see PR #26562 and #30260)
> > #    define _RWSTD_DEFINE_STATIC_CONST(ignore)   /* empty */
> > #  endif   // _RWSTD_NO_STATIC_CONST_MEMBER_DEFINITION
> > -----------
> > 
> >   I've commented the #if !defined (_MSC_VER) || (_MSC_VER 
> <= 1300) and 
> > corresponding #endif lines in ios_bits.cpp, and the test 
> shows no any 
> > errors.
> > 
> > 
> 
> I assume you couldn't find anything in the ChangeLog?

  Correct.

> I'll have to check the Perforce log at Rogue Wave to see if I can 
> find any clues as to why the conditional is there when I'm 
> back in the office (I'm out sick today and possibly 
> tomorrow). But if you've tested the code after removing it 
> (I'd do several different build types just to be sure) and 
> didn't see problems I'd say it should be a safe change to make.

  This definitely can't cause any problem because of the lines from
_defs.h above and the following lines from _config-msvcrt.h (see below)
the _RWSTD_DEFINE_STATIC_CONST macro always #defined to
/* empty */ on all MSVC and ICC/Windows.

_config-msvcrt.h:
---------------
#ifndef _RWSTD_NO_STATIC_CONST_MEMBER_DEFINITION
     // both MSVC 7.x and Intel C++/Windows allow "inline" initializers
     // for static const integral data members but out-of-line
definitions
     // cause multiply defined symbol errors (see PR #26562 and #30260)
     // disable their definitions in source files (the members are still
     // declared)
#  define _RWSTD_NO_STATIC_CONST_MEMBER_DEFINITION
#endif   // _RWSTD_NO_STATIC_CONST_MEMBER_DEFINITION
---------------

Farid.

Mime
View raw message