[Issue 7543] inout opApply should work properly
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Fri Mar 9 16:07:22 PST 2012
http://d.puremagic.com/issues/show_bug.cgi?id=7543
--- Comment #10 from Steven Schveighoffer <schveiguy at yahoo.com> 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
constructed:
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: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list