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