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