www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Strong size_t

reply Kagamin <spam here.lot> writes:
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)`.
Nov 26 2011
parent reply =?utf-8?Q?Simen_Kj=C3=A6r=C3=A5s?= <simen.kjaras gmail.com> writes:
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.
Nov 26 2011
parent reply Kagamin <spam here.lot> writes:
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...
Nov 26 2011
parent "Steven Schveighoffer" <schveiguy yahoo.com> writes:
On Sat, 26 Nov 2011 11:45:26 -0500, Kagamin <spam here.lot> wrote:

 Simen Kj=C3=83=C2=A6r=C3=83=C2=A5s 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=3D=3Dintp(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 =3D=3D 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 cons=
t =
 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=3D3659 -Steve
Nov 26 2011