Reputation: 73
I have the following code:
struct helper {
template<typename T> helper(T const&);
};
helper operator*(helper const&);
struct A {};
int main() {
// (1)
A a;
sizeof(*a);
// (2)
int i;
sizeof(*i);
}
Case (1) compiles fine and I understand that it is using the implicit conversion to the helper
type and the given operator overload.
For case (2), however, I get a compiler error:
invalid type argument of unary '*' (have 'int')
Why is the implicit conversion used for type A
but not for int
?
Upvotes: 6
Views: 331
Reputation: 50043
When no user defined type is involved, any operator is assumed to be a built-in operator. So
helper operator*(helper const&);
cannot be found for *i
when i
is of built-in type (such as int
).
Upvotes: 8