Thread overview
Strong size_t
Nov 26, 2011
Kagamin
Nov 26, 2011
Simen Kjærås
Nov 26, 2011
Kagamin
November 26, 2011
Tried to create a stronger version of size_t which will not interoperate with int and long http://codepad.org/47OB3nJi

But for some reason can't compare struct to int using opEquals and opCmp. How to fix it? And should it? One can write `v==intp(42)` or `v<intp(43)`.
November 26, 2011
On Sat, 26 Nov 2011 17:22:58 +0100, Kagamin <spam@here.lot> wrote:

> Tried to create a stronger version of size_t which will not interoperate with int and long
> http://codepad.org/47OB3nJi
>
> But for some reason can't compare struct to int using opEquals and opCmp. How to fix it? And should it? One can write `v==intp(42)` or `v<intp(43)`.

Have you tried to overload opEquals and opCmp for ints? That seems to
work just fine for me:

    bool opEquals(int v) const { return value == v; }
    int opCmp(int v) const
    {
        return value>v?1:value<v?-1:0;
    }

Just add those to the intp struct.
November 26, 2011
Simen Kjærås Wrote:

> On Sat, 26 Nov 2011 17:22:58 +0100, Kagamin <spam@here.lot> wrote:
> 
> > Tried to create a stronger version of size_t which will not interoperate
> > with int and long
> > http://codepad.org/47OB3nJi
> >
> > But for some reason can't compare struct to int using opEquals and opCmp. How to fix it? And should it? One can write `v==intp(42)` or `v<intp(43)`.
> 
> Have you tried to overload opEquals and opCmp for ints? That seems to work just fine for me:
> 
>      bool opEquals(int v) const { return value == v; }
>      int opCmp(int v) const
>      {
>          return value>v?1:value<v?-1:0;
>      }
> 
> Just add those to the intp struct.

It writes
Error: function strongintp.intp.opEquals type signature should be const bool(ref const(intp)) not const bool(ref const const(short) v)

Hmm... may be my compiler version is old and this was fixed...
November 26, 2011
On Sat, 26 Nov 2011 11:45:26 -0500, Kagamin <spam@here.lot> wrote:

> Simen Kjærås Wrote:
>
>> On Sat, 26 Nov 2011 17:22:58 +0100, Kagamin <spam@here.lot> wrote:
>>
>> > Tried to create a stronger version of size_t which will not  
>> interoperate
>> > with int and long
>> > http://codepad.org/47OB3nJi
>> >
>> > But for some reason can't compare struct to int using opEquals and
>> > opCmp. How to fix it? And should it? One can write `v==intp(42)` or
>> > `v<intp(43)`.
>>
>> Have you tried to overload opEquals and opCmp for ints? That seems to
>> work just fine for me:
>>
>>      bool opEquals(int v) const { return value == v; }
>>      int opCmp(int v) const
>>      {
>>          return value>v?1:value<v?-1:0;
>>      }
>>
>> Just add those to the intp struct.
>
> It writes
> Error: function strongintp.intp.opEquals type signature should be const bool(ref const(intp)) not const bool(ref const const(short) v)
>
> Hmm... may be my compiler version is old and this was fixed...

According to bugzilla, yes.

http://d.puremagic.com/issues/show_bug.cgi?id=3659

-Steve