Thanks. I really did read it as opS_p_lice, found a few references on
dlang.org, none on any spec page and got a little frustrated. I did not
realize that I had clearly misread it.
I had even written some notes about opSlice:
http://ddili.org/ders/d.en/operator_overloading.html
Apparently I had thought that it better returned a special type:
struct Range
{
// ...
}
struct Container
{
// For the object[] syntax
Range opSlice()
{
Range allElements;
// ... must provide access to all elements ...
return allElements;
}
/* ... */
}
Ali

Apparently, the array-wise operations require the following syntax:
a[] += b[];
In other words, the compiler wants to see [] on the right-hand side as
well. The following does not work with the same error message that you get:
int[] a, b;
a[] += b;
Error: invalid array operation a[] += b (did you forget a [] ?)
It is the same in your case. You have a function that returns a slice
but the compiler still wants to see [] on the rigth-hand side:
int[] foo()
{
int[] b;
return b;
}
void main()
{
int[] a;
a[] += foo(); // <-- Same compilation error
}
That's why you need to put the [] after it:
a[] += foo()[];
I think it is just the requirement of the syntax. (?)
Ali