Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Implicit conversion and operator overloading

Tags:

c++

c++11

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?

like image 328
fsj Avatar asked Oct 12 '16 12:10

fsj


1 Answers

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

like image 50
Baum mit Augen Avatar answered Oct 31 '22 19:10

Baum mit Augen