|
Boost Users : |
Subject: [Boost-users] [integer_traits problem
From: Robert Ramey (ramey_at_[hidden])
Date: 2012-05-29 19:26:12
I'm having problems with integer traits when passed an __int64 type data
type under Visual C++.
I run the following test:
boost::mpl::print<
boost::mpl::integral_c<
boost::intmax_t,
boost::integer_traits<boost::intmax_t>::const_min
>
> x13;
boost::mpl::print<
boost::mpl::integral_c<
boost::intmax_t,
boost::integer_traits<boost::intmax_t>::const_max
>
> x8;
What I expect to get for const_min is:
...
1> T=boost::mpl::integral_c<boost::intmax_t,0x8000000000000000>
...
What I get is:
1>test_fixed_type.cpp
1>c:\boostrelease\boost\mpl\print.hpp(51) : warning C4308: negative integral
constant converted to unsigned type
1> c:\projects\boost projects\safe_numerics\include\test_fixed_type.cpp(13)
: see reference to class template instantiation 'boost::mpl::print<T>' being
compiled
1> with
1> [
1> T=boost::mpl::integral_c<boost::intmax_t,0x800000000>
1> ]
1>c:\boostrelease\boost\mpl\print.hpp(51) : warning C4308: negative integral
constant converted to unsigned type
1> c:\projects\boost projects\safe_numerics\include\test_fixed_type.cpp(20)
: see reference to class template instantiation 'boost::mpl::print<T>' being
compiled
1> with
1> [
1> T=boost::mpl::integral_c<boost::intmax_t,0x7fffffffffffffff>
1> ]
That is the value for const_min is not correct !!. Note I've tried various
different types such as using __int64 and also changed the rendering of he
real vale to _I64_MIN. None of this seems to fix things.
I've also tried making my own specialzation of integral_c for this type:
template<boost::intmax_t C >
struct integral_c<boost::intmax_t, C>
{
BOOST_STATIC_CONSTANT(boost::intmax_t, value = C);
typedef integral_c_tag tag;
typedef integral_c type;
typedef boost::intmax_t value_type;
operator boost::intmax_t() const { return this->value; }
};
Hmmm now I'm wondering about BOOST_STATIC_CONSTANT. and looking at the
documenation of BOOST_STATIC_CONSTANT shows it's not really expected to work
on anything wider than an int.
What should one do in a case like this?
Robert Ramey
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net