Одним из требований к clang — новому компилятору Си++ — было предоставить пользователю подробную информацию об ошибках. Рассмотрим небольшой пример.
[]double UniversalGravitation(double G, double mass1, double mass2, double distance) { double F = G * ((mass1 * mass2)/(distance * dsitance)); return F; }
Здесь допущена описка в идентификаторе. Что же покажет нам clang?

Во-первых, он заботливо подчеркивает место в длинном выражении, какой именно идентификатор он считает незнакомым. Во-вторых, он учтиво подсказывает возможное исправление. Вспомним, как выглядит похожие сообщения в Microsoft Visual Studio 2010. (Хотя Визуал Студию 2010 можно и похвалить: такой тип ошибок оно подсвечивает ещё при редактировании.)

gcc показывает что-то вроде такого:
<font size="2" face="Consolas">/tmp/webcompile/_13952_0.cc: In function 'double UniversalGravitation(double, double, double, double)': /tmp/webcompile/_13952_0.cc:3: error: 'dsitance' was not declared in this scope</font>
Почитать о других возможностях диагностического механизма компилятора clang можно в справке: Expressive Diagnostics. Очень интересны случаи, когда оно находит ошибки в неразвёрнутых макросах или в тайпдефах.
Уже жду, когда компиляторы в будущем будут сами исправлять ошибки. А потом и сами писать код.