A matter of inout

Artur Skawina art.08.09 at gmail.com
Fri Jul 27 09:47:10 PDT 2012


On 07/27/12 17:53, bearophile wrote:
> This program used to compile in DMD 2.059:
> 
> 
> import std.stdio;
> inout(T[]) forwardDifference(T)(inout(T[]) s, in int n) pure {
>     foreach (_; 0 .. n)
>         s[] -= s[1 .. $];
>     return s[0 .. $-n];
> }
> void main() {
>     immutable A = [90.5, 47, 58, 29, 22, 32, 55, 5, 55, 73.5];
>     foreach (level; 0 .. A.length)
>         writeln(forwardDifference(A.dup, level));
> }
> 
> 
> Now it gives:
> 
> test.d(5): Error: slice s[] is not mutable
> test.d(12): Error: template instance test.forwardDifference!(double) error instantiating
> 
> Is it a 2.060 regression (or it's caused by a bug fix)?

'inout' basically means 'local const' - if you'd allow inout
data to be modified then it wouldn't be possible to call the
function with a const or immutable argument - which is the
whole point of inout...
You probably want 'inout(T)[]' if you're going to alter the
array.

artur


More information about the Digitalmars-d-learn mailing list