#include <vector>
using std::size_t;
struct Foo {
std::vector<int> bars;
int& operator[](size_t idx) {
return bars[idx];
}
};
class Bar {
Foo *foo; //some initialization
int& helper(size_t idx) {
return (*foo)[idx];
}
void barfoo() {
size_t baz = 1;
int qux;
//solution 1
qux = (*foo)[baz]; //works
(*foo)[baz] = 1; //works
//solution 2
qux = helper(baz); //works
helper(baz) = 1; //does not work: "expression is not assignable"
}
};
int main() {}
I2luY2x1ZGUgPHZlY3Rvcj4KdXNpbmcgc3RkOjpzaXplX3Q7CgpzdHJ1Y3QgRm9vIHsKICAgc3RkOjp2ZWN0b3I8aW50PiBiYXJzOwogICBpbnQmIG9wZXJhdG9yW10oc2l6ZV90IGlkeCkgewogICAgICByZXR1cm4gYmFyc1tpZHhdOwogICB9Cn07CgpjbGFzcyBCYXIgewogICBGb28gKmZvbzsgLy9zb21lIGluaXRpYWxpemF0aW9uCgogICBpbnQmIGhlbHBlcihzaXplX3QgaWR4KSB7CiAgICAgIHJldHVybiAoKmZvbylbaWR4XTsKICAgfQoKICAgdm9pZCBiYXJmb28oKSB7CiAgICAgIHNpemVfdCBiYXogPSAxOwogICAgICBpbnQgcXV4OwoKICAgICAgLy9zb2x1dGlvbiAxCiAgICAgIHF1eCA9ICgqZm9vKVtiYXpdOyAgLy93b3JrcwogICAgICAoKmZvbylbYmF6XSA9IDE7ICAgIC8vd29ya3MKCiAgICAgIC8vc29sdXRpb24gMgogICAgICBxdXggPSBoZWxwZXIoYmF6KTsgIC8vd29ya3MKICAgICAgaGVscGVyKGJheikgPSAxOyAgICAvL2RvZXMgbm90IHdvcms6ICJleHByZXNzaW9uIGlzIG5vdCBhc3NpZ25hYmxlIgogICB9ICAgICAKfTsKCmludCBtYWluKCkge30K