如何在gcc错误消息中隐藏默认模板参数
How to hide defaulted template parameters in gcc error messages?
阅读由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
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 如何使用默认参数等选择模板专业化
- 具有默认模板参数的多态类的模板推导失败
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 当函数模板参数是具有默认参数的类模板时,函数模板参数的推导如何执行
- 初始化具有非默认构造函数的std::数组项的更好方法
- 何时提供默认参数作为模板参数
- 是默认情况下分配给char数组常量的值
- 具有默认值的引用获取函数
- 这是我尝试让用户将值输入到数组中.然后将其隐藏为大量的星号
- 具有默认模板类型的默认构造函数的类型推导
- 结构和双指针隐藏在其他结构中,多层混淆
- 当给定默认值时,为什么此模板参数推导失败
- 修改 VS Code 中的默认C++代码段
- 声明默认的模板化函数
- 将const引用参数初始化为默认参数会导致悬空引用吗
- 如何禁用或隐藏 QFileDialog 中的默认取消按钮?
- C 如何使用隐藏的默认构造函数初始化成员
- 如何在gcc错误消息中隐藏默认模板参数
- 方法中的默认模板参数隐藏在类默认模板参数后面