#include <valarray>
using namespace std;
void foo(valarray<int>& va)
{
// You can't return by value to a non-const lvalue reference, it either
// has to be a const lvalue reference or a (C++11) rvalue reference. In your
// case it needs to be an r-value reference. Note that what's returned by
// the operator is an object that has reference semantics, not a reference!
//slice_array<int>& sa = va[slice(0,3,2)];
slice_array<int>&& sa = va[slice(0,3,2)];
sa = 98;
}
int main()
{
valarray<int> valary(21);
for(size_t i=0; i<valary.size(); ++i)
{
valary[i] = i;
}
foo(valary);
}
I2luY2x1ZGUgPHZhbGFycmF5Pgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdm9pZCBmb28odmFsYXJyYXk8aW50PiYgdmEpCnsKICAgLy8gWW91IGNhbid0IHJldHVybiBieSB2YWx1ZSB0byBhIG5vbi1jb25zdCBsdmFsdWUgcmVmZXJlbmNlLCBpdCBlaXRoZXIKICAgLy8gaGFzIHRvIGJlIGEgY29uc3QgbHZhbHVlIHJlZmVyZW5jZSBvciBhIChDKysxMSkgcnZhbHVlIHJlZmVyZW5jZS4gSW4geW91cgogICAvLyBjYXNlIGl0IG5lZWRzIHRvIGJlIGFuIHItdmFsdWUgcmVmZXJlbmNlLiBOb3RlIHRoYXQgd2hhdCdzIHJldHVybmVkIGJ5CiAgIC8vIHRoZSBvcGVyYXRvciBpcyBhbiBvYmplY3QgdGhhdCBoYXMgcmVmZXJlbmNlIHNlbWFudGljcywgbm90IGEgcmVmZXJlbmNlIQogICAvL3NsaWNlX2FycmF5PGludD4mIHNhID0gdmFbc2xpY2UoMCwzLDIpXTsKICAgc2xpY2VfYXJyYXk8aW50PiYmIHNhID0gdmFbc2xpY2UoMCwzLDIpXTsKICAgc2EgPSA5ODsKfQoKaW50IG1haW4oKQp7CiAgIHZhbGFycmF5PGludD4gdmFsYXJ5KDIxKTsKICAgZm9yKHNpemVfdCBpPTA7IGk8dmFsYXJ5LnNpemUoKTsgKytpKQogICB7CiAgICAgIHZhbGFyeVtpXSA9IGk7CiAgIH0KICAgZm9vKHZhbGFyeSk7Cn0=