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