Boost logo

Boost :

From: (noreply_at_[hidden])
Date: 2006-06-15 22:43:56

Patches item #1507034, was opened at 2006-06-15 22:43
Message generated for change (Tracker Item Submitted) made by Item Submitter
You can respond by visiting:

Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: None
Group: None
Status: Open
Resolution: None
Priority: 5
Submitted By: Scott McMurray (me22)
Assigned to: Nobody/Anonymous (nobody)
Summary: [integer] add support for integers longer than long

Initial Comment:
With the endian discussion, I looked at Boost.Integer
to try to figure out why it didn't support long long
and __int64 where possible. Since I couldn't see a
reason why it shouldn't, I went ahead and implemented it.

The only major interface change is adding additional
ValueUpper template parameters to int_(max|min)_value_t
and uint_value_t. They default to 0, so no valid old
code should be affected. They allow the programmer to
use, for example, uint_value_t<0x34567890,0x12> to
request a type that can hold 0x1234567890 or
int_min_value_t<-0x34567890,-0x12> to request a type
that can hold -0x1234567890, which will properly fail
if there are no types available over 32 bits (instead
of just truncating the constant and giving the wrong

I also took the opportunity to add int_exact_t
templates for cases where an exact number of bits is
needed. int_exact_t<32>::exact, for example. (
Ideally this would be an additional typedef inside
int_t and uint_t, but I couldn't come up with a simple
way of doing that. If it were acceptable to have exact
as a typedef for void when not available, it'd be easy,
but that goes against existing practice. ) If this
isn't wanted, it's very easy to remove.

If this looks good I'll try to decipher the macros in
the test suite to add some new ones. The changes don't
cause any regressions from integer_test.cpp under my
g++ 3.3.6, 3.4.6, or 4.1.1. In keeping with the
rationale and noticing that it works just about all the
compilers, I used no partial specialisation or
recursion, so I'm hoping that it'll work fine in the
more troublesome compilers as well. Unfortunately
portage tell me that gcc-2* is to old to work with the
rest of my system, so I haven't been able to try.


You can respond by visiting:

Boost-bugs mailing list

Boost list run by bdawes at, gregod at, cpdaniel at, john at