まず、エラーメッセージを表示するのはC++ではありません。あなたのコンパイラです。これは学術的に聞こえるかもしれませんが、それは重要な違いです。コンパイラ診断はすべてメインストリームの実装ではかなり複雑なので、実際はあなたの質問に影響しません。
これは怠惰ではなく、歴史的なものではありません。それは、これらの要因の組み合わせです:
それは本当の専門家は、彼らが使用できる情報を取得しないことを意味するときには、いくつかの初心者のためには良いdumbingダウンません
正確にしたいです。あなたの例では、 "cv-qualifier"は正確で正確で、何が起こっているかを伝えます。あなたはそれを説明する他の方法を見つけることができますが、それは実際にあなたが使っている言語の面で進んでいるものに対応していないか、間違っているでしょう。
実装の複雑
さて、公平であるために、テンプレートの診断は恐ろしいすることができます。より最近のGCCバージョン、Clang、そしてSTLFiltのようなツールでこれを改善する努力がなされています。しかし、最終的に、これは正しいことが難しいです。本当にやるのはとても難しいです。あなたがより良い仕事をすることができると思えば、気に入った実装にパッチを提出してください。 :)
言語の複雑
C++は非常に複雑です。それはその性質です。小さなスクリプト言語や、どんな言葉を使ってもきれいなメッセージを伝えるよりもはるかに強力です。ある人は、その建設がでもという複雑なものであると主張するかもしれません。それは言語の共通の批判です。複雑で正確な診断のためににはが必要であると言えるでしょう。
これが第一の要因の変化である
を読んで心を行うことができないこと。より簡単なエラーメッセージのセットを生成するために、コンパイラは、コードが壊れたときに、代わりに書きたいものを知る必要があります。それは読書を気にせずには不可能です。コンパイラは、推測しようとすると並べ替えることができますが、リスクはそれが間違った推測を得ることです。実際、C++と同じくらい複雑な言語では、そのリスクはかなり高いです。だから私たちはコンパイラが私たちとまっすぐであることを望んでおり、私たちが書いたコードとパターンマッチ診断に脳を鍛えることができます。プロのC++開発者は、通常、特定のエラーメッセージの原因(特定のコードによって引き起こされる)を単なる秒数で認識することができます。たとえそのエラーメッセージが起こったとしても、そのエラーメッセージは完全に役に立たないようなものです。それが私たちの貿易の魔法です!
イラスト - 現代のコンパイラは、一般的にかなり良く明示的なエラーメッセージを生成します。彼らはあなたが書いている言語を知っていると仮定しますが、それだけです。 'cv-qualifier'に関しては、これはC++標準(例えば、2011年標準の§3.9.3CV修飾子[basic.type.qualifier])で使用される言語の専門用語です。はい、 'constまたはvolatile修飾子'を意味します。 –
それは問題ではありません。テンプレートエラーはテキストの壁を生成しますが、唯一重要なことは最初のエラーの行番号です。私は決して言わないことに注意を払っていません。 –
C++にはエラーメッセージがありません。コンパイラの実装にはエラーメッセージがあります。したがって、あなたの質問は、それぞれの場合のインプリメンテータに対処する必要があります。 – EJP