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?