On Friday, 11 September 2015 at 03:25:58 UTC, SimonN wrote:
Hi,

this looks excellent! I've been playing around with it, and am looking forward to using it regularly.

I've ran into a compilation error when iterating over a const Enumap. In the following code:

    import std.stdio;
    import std.conv;
    import enumap;

    enum MyEnum { e1, e2, e3 }

    struct A
    {
        Enumap!(MyEnum, int) map;

        void mutable_output()
        {
            foreach (MyEnum e, int i; map)
                writefln("%s: %d", e.to!string, i);
        }

        void const_output() const
        {
            foreach (MyEnum e, const int i; map)
                writefln("%s: %d", e.to!string, i);
        }
    }

...the first method (mutable_output) compiles and works with no errors. The const method, however, gives:

source/app.d(19,13): Error: invalid foreach aggregate this.map,
    define opApply(), range primitives, or use .tupleof".

It doesn't seem to matter whether I put const int, or int, in the foreach statement.

What's the idiomatic way to loop over a const Enumap? :-)

-- Simon

Interesting, thanks for pointing that out.
I don't think I did a great job with const-correctness here, I'll take a look tomorrow. It should definitely be possible to iterate over (and index, etc...) a const/immutable Enumset, though you're right that it doesn't work right now.

Reply via email to