[random] Use of make_unsigned/make_signed

Several of the random number distributions use make_[un]signed internally. However, this trait is not intended as a customization point for UDT's - it's only supposed to be instantiated for integer or enum types - and yes that's a deliberate decision that's now enshrined in the standard ;-) Unfortunately this means that these distributions can't be instantiated on UDT's - big number types for example. Since it seems that these traits are only used to obtain a type that is large enough to store a difference between the endpoints of a range, would it be possible for these to change to use something like: namespace boost{ namespace random{ template <class T> struct range_type : public make_signed<T> { }; }} Then range_type could be [partially-] specialized for UDT's. Note that for some types, there might simply not be a corresponding unsigned type at all, but I'm assuming that doesn't foul up the logic, as long as the type is wide enough? Comments? Thanks, John.

AMDG On 03/14/2012 11:30 AM, John Maddock wrote:
Several of the random number distributions use make_[un]signed internally. However, this trait is not intended as a customization point for UDT's - it's only supposed to be instantiated for integer or enum types - and yes that's a deliberate decision that's now enshrined in the standard ;-)
Unfortunately this means that these distributions can't be instantiated on UDT's - big number types for example.
At the moment, the library assumes that all IntType/UIntType parameters are built in integral types. I think more changes than just this would be required to allow UDT's.
Since it seems that these traits are only used to obtain a type that is large enough to store a difference between the endpoints of a range, would it be possible for these to change to use something like:
namespace boost{ namespace random{
template <class T> struct range_type : public make_signed<T> { };
}}
Then range_type could be [partially-] specialized for UDT's. Note that for some types, there might simply not be a corresponding unsigned type at all, but I'm assuming that doesn't foul up the logic, as long as the type is wide enough?
In Christ, Steven Watanabe
participants (2)
-
John Maddock
-
Steven Watanabe