On Wednesday, 9 October 2013 at 15:26:35 UTC, Gary Willoughby wrote:
Can someone explain why i can change Bar's immutable name member please?

        import std.stdio;

        class Foo
        {
                public void change(string name)
                {
                        name = "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();
        }

I thought an error would inform me that the `Foo.change` function is being called with the wrong parameter type.

This would fail if you were to declare `change` as `void change(ref string name)`. This is valid because you are passing the value of a reference to a string. `Bar.name` is an immutable reference to a string, but your only passing a copy of that reference to `Foo.change`, that copy is mutable by default.

Reply via email to