vedere questo esempio:Perché è possibile utilizzare operator = ma non operator == con gli inizializzatori di bretelle C++ 11?
struct Foo
{
int a;
int b;
bool operator == (const Foo & x)
{
return a == x.a && b == x.b;
}
};
int main()
{
Foo a;
a = {1, 2};
if (a == {1, 2}) // error: expected primary-expression before ‘{’ token
{
}
}
La linea a={1,2}
va bene. Le parentesi graffe vengono convertite in un Foo
in modo che corrisponda al tipo di argomento del metodo implicito operator=
. Funziona ancora se operator=
è definito dall'utente.
La riga if (a=={1,2}})
errori come indicato.
Perché l'espressione {1,2}
non viene convertita in un Foo
in modo che corrisponda al metodo definito dall'utente operator==
?
Questo è con g ++ - 4.7. – spraff
Non vedo alcun operatore esplicito == 'nel codice. Intendevi "definito dall'utente"? –
il fatto che sia chiamato elenco di inizializzazione piuttosto che litterale dell'espressione potrebbe essere un indizio del fatto che non è supportato di proposito (anche se non ci ho pensato prima di chiederlo). – didierc