inout and function/delegate parameters

Stewart Gordon smjg_1998 at yahoo.com
Wed Mar 7 14:37:53 PST 2012


On 07/03/2012 15:41, Steven Schveighoffer wrote:
<snip>
> In fact, I think this is valid D code:
>
> int i;
> const int *pi = &i;
> int *p = cast()pi;
> *p = 5; // legal because I know this points at i, and i is really mutable

cast() is an abomination.  I'm not sure OTTOMH whether it's a bug that it works.

> But from an API point of view, I look at at inout as guaranteeing anything the parameter
> points at won't change while inside the function *using that parameter*. Even though it's
> legal, it's disingenuous (at least as long as we define inout that way).

That's what const is for.

The whole point of inout is that the caller has the choice of whether to pass in and get 
out again mutable, const or immutable data.  Allowing the caller to pass in a delegate 
with a mutable, const or immutable parameter would fit right in with this.

<snip>
> As usual, you find and poke holes in all my arguments :) I'm thinking that in order to
> make this work we need a way to specify an inout modifier really represents the matched
> type rather than a full-fledged inout parameter.
<snip>

Yes, and ways of specifying this have been suggested early in this thread.

Stewart.


More information about the Digitalmars-d mailing list