I have a class, let's call it Wrapper
, that wraps a given type, let's say MyClass
.
In reality, Wrapper
is a class template, but I think that's not relevant here.
Wrapper
exposes the wrapped MyClass
by means of a conversion operator (just for reading).
When I create an operator for MyClass
as free function (in my example a unary minus operator), this works as expected, I can use the operator also on the Wrapper
class.
If I, however, implement the operator as a member function, the compiler complains: error: no match for ‘operator-’
.
I thought the free function and the member function are equivalent in this case, why aren't they?
Is there a way to change the Wrapper
class that a member operator or MyClass
works?
If there isn't, does this suggest that it is in general preferable to implement an operator as free function instead of as member function?
Here's some code to illustrate the problem.
struct MyClass {
// This doesn't work:
void operator-() const {}
};
// It works with this instead of the member operator:
//void operator-(const MyClass&) {}
struct Wrapper {
operator MyClass() const { return MyClass(); }
};
int main() {
-Wrapper();
}
Here's a live example: http://ideone.com/nY6JzR