How can I use structs in a named enum?

simendsjo simendsjo at gmail.com
Wed Feb 29 03:34:47 PST 2012


On Wed, 29 Feb 2012 12:27:32 +0100, simendsjo <simendsjo at gmail.com> wrote:

> On Wed, 29 Feb 2012 12:15:35 +0100, simendsjo <simendsjo at gmail.com>  
> wrote:
>
>> .. That is >> enum E : Struct {}
>>
>> struct S {
>>      int a;
>> }
>>
>> // ok
>> enum E : S {
>>      a = S(1),
>> }
>>
>> // Error: need member function opCmp() for struct S to compare
>> /*
>> enum E2 : S {
>>      a = S(1),
>>      b = S(2)
>> }
>> */
>>
>> struct S2 {
>>      int a;
>>      int opCmp(ref const S2 other)
>>      {
>>          return a == other.a ? 0 : (a < other.a ? -1 : 1);
>>      }
>> }
>>
>> // Error: function opcmp.S2.opCmp (ref const(S2) other) is not callable  
>> using argument types (E3)
>> // Error: cast(const(S2))S2(1) is not an lvalue
>> // Error: function opcmp.S2.opCmp (ref const(S2) other) is not callable  
>> using argument types (E3)
>> // Error: cast(const(S2))S2(1) is not an lvalue
>> enum E3 : S2 {
>>      a = S2(1),
>>      b = S2(2)
>> }
>>
>> void main() {
>> }
>>
>>
>> So E3 is passed as the parameter to S2.opCmp..?
>
> Hmm.. By removing ref const in opCmp, it works as expected

Btw.. Removing the ref is obvious, but why do I have to remove const?
Perhaps also the documentation for opCmp should be improved..?


More information about the Digitalmars-d-learn mailing list