不要害怕编译器错误,尤其是 C++ 模板编程时产生的大量错误。这其实是静态编译器在帮助我们找出代码中存在的问题,例如形式上的不一致(变量名、函数签名、模板参数等)、不严谨(用法与编程风格的警告)。与解释型语言相比,这相当于增加了更多一层的代码合法性与安全性的严格检查,能够暴露出解释器无法给出的潜在问题。有这么好的工具为什么不去使用呢?

对于大量的模板相关的错误信息,当我们习惯了编译器的“说话方式”后,它们看起来也就没有那么令人生畏或者无从下手了。只要从中提取几个关键信息,出错的位置与直接原因就大体清楚了。这包括:错误所在的文件与行号,与出错文件相关的头文件引用关系,模板参数的实际代入值,调用函数签名与函数定义原型有何不同,调用函数签名与哪个重载函数的定义相匹配。

参考:《编译器视角与掌控细节