equivariant functions ('in' = headconst!?)
Bill Baxter
wbaxter at gmail.com
Sat Oct 18 13:05:51 PDT 2008
On Sun, Oct 19, 2008 at 3:45 AM, Bruno Medeiros
<brunodomedeiros+spam at com.gmail> wrote:
> Andrei Alexandrescu wrote:
>>
>> You'll be glad then to learn that "in" means const at least in D2:
>>
>> void foo(in char[] s); // same as foo(const(char)[] s)
>>
>
> What??
> Whoa, at first I thought you were mistaken, and meant 'const(char[]) s'
> instead (since that is what is the same as 'const char[] s'), but I fired up
> my editor and tried it out, and it works as you described! Even more
> surprising, it works the same way when using a class type:
>
> class Foo { int x; }
>
> void func(in Foo foo, const scope Foo foo2)
> {
> foo = null; // Ok!
> //foo2 = null; //Compile error!
> //foo.x = 0; // Compile error!
> pragma(msg, (typeof(foo)).stringof ~ " " ~ (typeof(foo2)).stringof);
> }
>
> Which means 'in' works exactly as headconst! Is this another easter egg, or
> a bug? It's certainly not according to the spec at least.
I think you mean "tailconst". The head is not const, the tail is.
--bb
More information about the Digitalmars-d
mailing list