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

How to hide defaulted template parameters in gcc error messages?

本文关键字:默认 隐藏 参数 消息 gcc 错误      更新时间:2023-10-16

阅读由g++生成的错误消息通常很痛苦,因为gcc扩展了像

这样的名称
std::ostream
我的代码中的

变成了更长的形式,比如

std::basic_ostream<char, std::char_traits<char> >
错误消息中的

。类似地,gcc将std::string展开为std::basic_string<char>。我没有看到这样的扩展有任何好处,而且它只会使我很难将错误消息和错误站点联系起来。

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

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

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

  • gcc支持着色自gcc 4.9与-fdiagnostics-color={auto, always, never}。查看这里的文档。

存在一些第三方工具来帮助您解密错误消息:

  • GCCFilter用于错误信息的着色和简化(Perl脚本)
  • ColorGCC以同样的方式(Perl脚本),git在这里。
  • STLFilt:为stl相关诊断设计的消息过滤器。请注意,它不再被支持/开发。

作为一个(非常好的)替代,clang编译器非常非常擅长诊断和错误消息。

我怀疑你现在做不到。一种闭合选项是fno-pretty-templates,它的作用如下:

-fno-pretty-templates
当错误消息引用函数模板的专门化时,编译器通常打印函数模板的签名模板后面跟着模板参数和任何类型或签名中的类型名(例如void f(T) [with T = int]而不是Void f(int))以便清楚涉及到哪个模板。当一个错误消息指的是类模板的专门化编译器省略与默认模板匹配的任何模板参数模板的参数。如果其中任何一种行为成功更难理解而不是更容易理解的错误消息,您可以使用-fno-pretty-templates