Re: [Boost-bugs] [Boost C++ Libraries] #3657: integer.hpp does not compile in MSVS 8.0 with /Za

Subject: Re: [Boost-bugs] [Boost C++ Libraries] #3657: integer.hpp does not compile in MSVS 8.0 with /Za
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2010-02-04 08:56:49


#3657: integer.hpp does not compile in MSVS 8.0 with /Za
----------------------------+-----------------------------------------------
  Reporter: abadura@… | Owner: dlwalker
      Type: Bugs | Status: reopened
 Milestone: Boost 1.43.0 | Component: integer
   Version: Boost 1.42.0 | Severity: Problem
Resolution: | Keywords:
----------------------------+-----------------------------------------------
Changes (by abadura@…):

  * status: closed => reopened
  * version: Boost 1.41.0 => Boost 1.42.0
  * resolution: fixed =>
  * milestone: Boost 1.42.0 => Boost 1.43.0

Comment:

 The problem still exists for VS 2005.

 It seems there is more then one problem here actually.

 ----

 Visual C++ configuration is incorrect.

 '''boost/config/compiler/visualc.hpp!#128-132'''

 {{{
 #if (_MSC_VER >= 1310) && (defined(_MSC_EXTENSIONS) || (_MSC_VER >= 1500))
 # define BOOST_HAS_LONG_LONG
 #else
 # define BOOST_NO_LONG_LONG
 #endif
 }}}

 Visual C++ 2005 (which is '''_MSC_VER == 1400''') also has '''long long'''
 type (regardless whether '''_MSC_EXTENSIONS''' is defined or not).

 ----

 Integer headers are still incorrect.

 '''boost/integer_fwd.hpp!#80-86'''

 {{{
 #if !defined(BOOST_NO_INTEGRAL_INT64_T) && !defined(BOOST_NO_INT64_T) &&
 (defined(BOOST_HAS_LONG_LONG) || defined(BOOST_HAS_MS_INT64))
 template < >
     class integer_traits< ::boost::long_long_type>;

 template < >
     class integer_traits< ::boost::ulong_long_type >;
 #endif
 }}}

 It seems that '''BOOST_HAS_MS_INT64''' in no way influences existence of
 '''::boost::long_long_type''' thus it should disappear from the condition
 because it leads to broken compilation.

 Or the other way: it should start influence existence of
 '''::boost::long_long_type'''. To achieve this preprocessor condition in

 '''boost/config/suffix.hpp!#467-477'''

 {{{
 #if defined(BOOST_HAS_LONG_LONG)
 namespace boost{
 # ifdef __GNUC__
    __extension__ typedef long long long_long_type;
    __extension__ typedef unsigned long long ulong_long_type;
 # else
    typedef long long long_long_type;
    typedef unsigned long long ulong_long_type;
 # endif
 }
 #endif
 }}}

 should include '''BOOST_HAS_MS_INT64'''.

 Which of those two is correct depends on how all Visual C++ compilers
 behave. I have only access to 2005 and 2008 so someone else should check
 it on 2003 and earlier.

 ----

 In Visual Studio 2008 it seems to be fine now.

-- 
Ticket URL: <https://svn.boost.org/trac/boost/ticket/3657#comment:2>
Boost C++ Libraries <http://www.boost.org/>
Boost provides free peer-reviewed portable C++ source libraries.

This archive was generated by hypermail 2.1.7 : 2017-02-16 18:50:02 UTC