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
?
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
).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With