--- Comment #10 from Steven Schveighoffer <> 2012-03-09 
16:07:27 PST ---
(In reply to comment #8)

> Indeed.  The point is that there are two possible interpretations of the
> opApply signature, and the spec isn't clear on which applies:
> (a) the constancy is passed through to the delegate
> (b) the delegate has an inout parameter in its own right

I think it must be (b).  Consider you don't know when the delegate was

void foo(inout(int)* x, inout(int)* delegate(inout(int)* x) dg)
   inout(int)* bar(inout(int)* m) { return m;}
   auto dg2 = &bar;
   assert(typeof(dg2) == typeof(dg)); // ???

   immutable int y = 5;
   dg2(&y); // ok
   dg(&y); // must fail!

If the assert doesn't pass, then what is the type of dg vs. dg2?  If it passes,
then dg and dg2 are interchangeable, and you will violate const (what if x is
mutable?).  Even if the assert fails, it's going to be way *way* too confusing
to have two types that are identical in syntax be actually different types
under the hood.

We *absolutely* need a new syntax if case (a) is to be included.

Configure issuemail:
------- You are receiving this mail because: -------

Reply via email to