On Wednesday, 9 October 2013 at 15:46:29 UTC, Gary Willoughby wrote:

So why does this give me an error i expect:

        import std.stdio;

        class Foo
        {
                public void change(string[] name)
                {
                        name[0] = "tess";
                        writeln(name);
                }
        }

        class Bar
        {
                private static immutable string name[] = ["gary"];

                public void test()
                {
                        auto foo = new Foo();
                        foo.change(this.name);
                }
        }

        void main(string[] args)
        {
                auto bar = new Bar();
                bar.test();
        }

Maybe this will help explain it:
void main() {
  pragma(msg, typeof(Bar.name));
  pragma(msg, typeof(Foo.change));
}
will print:

immutable(char[][])
void(string[] name)

The latter is really:

void(immutable(char)[] name)

The former is really:
immutable(immutable(immutable(char)[])[])

So for name the whole kit and kaboodle is immutable and you can not pass the whole immutable thing into something that is only immutable at one level.

Thanks
Dan

Reply via email to