6

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?

0

1 Answer 1

8

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).

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.