2012-05-24 13 views
5

Gli errori di compilazione con i modelli sono spesso oscuri e non facilmente decifrabili a meno che non si sia veramente esperti con i modelli. Molte volte un programmatore esperto potrebbe anche essere sconcertato da questi. Sono sicuro che molti di noi ne hanno sentito il colpo molte volte.Messaggi di errore diagnostici più precisi con i modelli?

Mi pare di capire lo standard C++ mandati solo implementazioni di fornire una diagnosi per un programma mal formate, ma non come ciò che messaggi di diagnostica devono essere previsti o .
Tuttavia, ci sono delle linee guida stabilite dal comitato degli standard per superare questo problema di diagnostica non facilmente decifrabile (soprattutto) nel caso di modelli. Questo è mai venuto fuori per una discussione? Inoltre, le implementazioni mainstream stanno facendo qualcosa o hanno previsto di questo problema?

La domanda è abbastanza aperta per la discussione ma con la comunità SO C++ che è una delle comunità C++ più attive sono sicuro che qualcuno da qualche parte deve avere almeno qualche idea di questo. Inoltre, alcuni membri del comitato di standard (lo so) partecipano attivamente al tag C++, spero che possano avere qualche informazione su questo se e altri.

+0

clang ++ è un ottimo strumento per questo. Il messaggio di errore è molto meglio di quelli di g ++ e quelli che ricordo da VS2005 (non ho usato VS da molto tempo). –

+1

La risposta alla tua domanda è [Concepts] (http://en.wikipedia.org/wiki/Concepts_%28C%2B%2B%29). Sfortunatamente, non erano pronti per C++ 11. –

risposta

5

Stai chiedendo due distinti domande.

Prima di tutto, sì, le implementazioni mainstream stanno facendo qualcosa al riguardo. Potrebbe non essere una priorità assoluta per g ++ o msvc, ma queste non sono le uniche implementazioni mainstream. Era uno degli obiettivi di design dietro clang (vedi http://clang.llvm.org/diagnostics.html), e almeno ad un certo punto Intel ha elencato errori di template migliori come punto vendita per iC++ su msvc.

In secondo luogo, le persone del comitato per gli standard hanno discusso questo in dettaglio, e hanno concordato soprattutto che i concetti costituivano una parte importante della risposta, il che significa che è stato rimandato al futuro poiché i concetti sono stati rimossi dal C++ 11 standard.

3

È sicuramente un problema, soprattutto quando le persone iniziano a fare cose complicate con le metaclassi. L'unico strumento che conosco è un po 'lo stlfilt, che "semplifica e/o riformatta messaggi di errore e avvertenza C++ a lungo termine, con particolare attenzione alla diagnostica correlata a STL"

Problemi correlati