2016-10-12 17 views
6

I mają następujące oznaczenia:Pośrednie konwersji i operator przeciążenia

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); 
} 

przypadku (1) kompiluje i zrozumieć, że jest on za pomocą niejawnego konwersji do rodzaju helper i przeciążenia danego operatora.

W przypadku (2), ale pojawia się błąd kompilatora:

invalid type argument of unary '*' (have 'int') 

Dlaczego niejawna konwersja używany typu A ale nie dla int?

Odpowiedz

8

W przypadku braku typu zdefiniowanego przez użytkownika, zakłada się, że dowolny operator jest operatorem wbudowanym. Więc

helper operator*(helper const&); 

nie można znaleźć dla *i gdy i ma wbudowany typ (takich jak int).

Powiązane problemy