@@ -133,17 +133,26 @@ version(mir_ndslice_test) unittest
133133 // 4 5 6
134134 auto matrix = iota([2 , 3 ], 1 );
135135
136- assert (concatenation(vector, matrix).slice == [
136+ auto c0 = concatenation(vector, matrix);
137+
138+ assert (c0.slice == [
137139 [0 , 0 , 0 ],
138140 [1 , 2 , 3 ],
139141 [4 , 5 , 6 ],
140142 ]);
141143
142144 vector.popFront;
143- assert (concatenation! 1 (vector, matrix).slice == [
145+ auto c1 = concatenation! 1 (vector, matrix);
146+ assert (c1.slice == [
144147 [0 , 1 , 2 , 3 ],
145148 [0 , 4 , 5 , 6 ],
146149 ]);
150+
151+ auto opIndexCompiles0 = c0[];
152+ auto opIndexCompiles1 = c1[];
153+
154+ auto opIndexCompilesForConst0 = (cast (const )c0)[];
155+ auto opIndexCompilesForConst1 = (cast (const )c1)[];
147156}
148157
149158// / Multidimensional
@@ -364,6 +373,21 @@ struct Concatenation(size_t dim, Slices...)
364373 assert (indices[dim] < _slices[$- 1 ].length! dim);
365374 return _slices[$- 1 ][indices];
366375 }
376+
377+ ref opIndex ()() scope return
378+ {
379+ return this ;
380+ }
381+
382+ auto opIndex ()() const return scope
383+ {
384+ import mir.ndslice.topology: iota;
385+ import mir.qualifier: LightConstOf, lightConst;
386+ import std.format : format;
387+ alias Ret = .Concatenation! (dim, staticMap! (LightConstOf, Slices));
388+ enum ret = " Ret(%(lightConst(_slices[%s]),%)]))" .format(_slices.length.iota);
389+ return mixin (ret);
390+ }
367391}
368392
369393
0 commit comments