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.