clang のちょっと賢いエラーメッセージ

clang のエラーメッセージで面白いものがあったので、載せておきます。

[ソース]

template<tyepname T>   // typo
struct hoge{};

int
main(){
    doubelw d = 0.0;   // typo
    return 0;
}

これは double と typename を typo してしまってコンパイルエラーになる例なんですが clang だとこんなエラーメッセージを出力します。

[clang]

main.cpp|1 col 10| error: unknown type name 'tyepname'; did you mean 'typename'?
|| template<tyepname T>
||          ^
main.cpp|6 col 2| error: use of undeclared identifier 'doubelw'; did you mean 'double'?
||         doubelw d = 0.0;
||         ^~~~~~~
||         double
|| 2 errors generated.

こんな感じで『もしかして:typename』みたいに推測してくれます。
これは賢い。
他の処理系でもこんな感じのエラー出力ってあったかしら。


ちなみに他のコンパイラのエラーメッセージはこんな感じです。

[gcc]

main.cpp|1 col 10| error: 'tyepname' has not been declared
|| D:/main.cpp: In function 'int main()':
main.cpp|6 col 2| error: 'doubelw' was not declared in this scope
main.cpp|6 col 10| error: expected ';' before 'd'

[msvc]

|| main.cpp
main.cpp|1 error 2061| 構文エラー : 識別子 'tyepname'
main.cpp|2 error 2992| 'hoge' : テンプレート パラメーター リストが間違っているか、または存在しません
main.cpp|2| 'hoge' の宣言を確認してください。
main.cpp|6 error 2065| 'doubelw' : 定義されていない識別子です。
main.cpp|6 error 2146| 構文エラー : ';' が、識別子 'd' の前に必要です。
main.cpp|6 error 2065| 'd' : 定義されていない識別子です。

ますます、clang の今後に期待できそうですね!