bigint
Don
nospam at nospam.com
Mon Nov 29 13:58:27 PST 2010
Kagamin wrote:
> Don Wrote:
>
>>> Why are they templated to begin with? Just for the heck of it?
>>>
>>> bool opEquals(ref const BigInt y) const
>>> bool opEquals(long y) const
>> No, because then it fails for ulong.
>> It's those bloody C implicit conversions.
>
> hmm... works for me:
> ---
> struct A
> {
> bool opEquals(ref const A y) const
> {
> return false;
> }
> bool opEquals(long y) const
> {
> return true;
> }
> }
>
> int main()
> {
> A a;
> ulong b=42;
> assert(a==b);
> return 0;
> }
> ---
Yes, but the code is incorrect if b is larger than long.max.
The problem is that values in the range long.max+1..ulong.max
get turned into values in the range -1 .. -long.max-1
How can you distinguish them?
More information about the Digitalmars-d-learn
mailing list