fsj
fsj

Reputation: 73

Implicit conversion and operator overloading

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

Answers (1)

Baum mit Augen
Baum mit Augen

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

Related Questions