I'm guessing this just isn't legal in C++, but I thought I'd ask, given a struct that I don't own:
struct foo {
int x;
int y;
int z;
};
I want to write a non-member subscript operator for it:
int& operator [](foo& lhs, const std::size_t rhs) {
switch(rhs) {
case 0U:
return lhs.x;
case 1U:
return lhs.y;
case 2U:
return lhs.z;
default:
return *(&(lhs.z) + rhs - 2U);
}
}
error:
int& operator[](foo&, std::size_t)must be a nonstatic member function
not all operators can be overloaded as free functions.
Not the standard, but clearly written over at cppreference, the operators
[],=,->and()must be non-static member functions.If you can do
wrap(f)[2]you can get it to work. But there is no way to get it to work strait on afooinstance.then you can do this:
and it works.
index_wrap_tforwards[]to a free call tooperator_indexthat does ADL.