如何在gcc错误消息中隐藏默认模板参数?

时间:2014-07-24 08:05:09

标签: c++ templates gcc

读取g ++生成的错误消息通常很痛苦,因为gcc扩展名称,如

std::ostream

在我的代码中转换为更长的形式,如

std::basic_ostream<char, std::char_traits<char> >

在错误消息中。同样,gcc会将std::string扩展为std::basic_string<char>。我没有看到这种扩展带来任何好处,只是让我很难将错误消息和错误网站联系起来。

我想知道是否有可能告诉gcc禁用此扩展行为并使用带有默认模板参数的较短名称?

有一个相关的问题here似乎没有显示长的扩展名称。我在这里问是否可以只显示我在代码中使用的短名称。答案也没有解决问题。

2 个答案:

答案 0 :(得分:1)

没有编译器标志来减少或更改错误消息以及相关的类型/模板。

  • gcc支持着色,因为gcc 4.9带有-fdiagnostics-color={auto, always, never}。请参阅文档here

有许多第三方工具可以帮助您解密错误消息:

  • GCCFilter用于着色和简化错误消息(Perl脚本)
  • ColorGCC同样(Perl脚本),git是here
  • STLFilt:为与STL相关的诊断而设计的消息过滤器。请注意,它不再受支持/开发。

同样作为(非常好的)替代方案the clang compiler is very, very good at diagnosis and error messages

答案 1 :(得分:1)

我怀疑你现在可以。一种关闭选项是fno-pretty-templates,其行为如下:

  

-fno-漂亮的模板
  当错误消息引用函数模板的特化时,编译器通常会打印签名   模板后跟模板参数和任何typedef或   签名中的类型名称(例如void f(T)[with T = int]而不是   void f(int))以便明确涉及哪个模板。当一个   错误消息是指类模板的特化,   编译器省略了与默认模板匹配的任何模板参数   该模板的参数。如果这些行为中的任何一个成功   更难理解错误信息而不是更容易,你可以使用   -fno-pretty-templates禁用它们。