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 の今後に期待できそうですね!