Il compilatore rileva più candidati praticabili per un operatore sovraccaricato (come operator<< o operator+) aventi costo di conversione identico, rendendo impossibile scegliere l'implementazione senza ambiguità.
AMBIGUOUS_OPERATOR
→
Due o più firme di una funzione sovraccaricata richiedono conversioni implicite di pari priorità rispetto agli argomenti forniti, impedendo la risoluzione dell'overload.
AMBIGUOUS_FUNCTION_CALL
→
Un riferimento non-const ('T&') può associarsi solo a oggetti persistenti identificabili da un indirizzo (lvalue); passare un valore temporaneo (rvalue come un letterale o il risultato di un'espressione) genera errore di compilazione.
BINDING_LVALUE_TO_RVALUE
→
Una funzione accetta un riferimento rvalue ('T&&', semantica di spostamento) ma riceve una variabile con nome persistente (lvalue); per autorizzare lo spostamento della risorsa è necessario convertire l'argomento con 'std::move(var)'.
CANNOT_BIND_RVALUE_TO_LVALUE
→
L'errore compare quando non esiste alcuna conversione standard o definita dall'utente (operatore di cast o costruttore non-explicit) per convertire l'espressione sorgente nel tipo di destinazione richiesto.
CANNOT_CONVERT_INIT
→
Un costruttore qualificato con la parola chiave 'explicit' vieta l'inizializzazione con operatore di uguaglianza ('MyClass obj = val;') o la conversione automatica nei parametri di funzione; richiede l'inizializzazione diretta ('MyClass obj(val);' o 'MyClass obj{val};').
EXPLICIT_CONSTRUCTOR_COPY_INIT
→
L'inizializzazione uniforme con parentesi graffe ('int x{3.14};' o 'std::vector<int> v{1.5};') vieta categoricamente le conversioni implicite che comportano perdita di dati o troncamento (narrowing).
NARROWING_CONVERSION
→
All'interno di un template, il compilatore tratta per default qualsiasi identificatore dipendente 'T::Type' come una variabile o membro statico anziché un tipo, richiedendo il prefisso esplicito 'typename T::Type'.
NESTED_NAME_SPECIFIER
→