我想知道是否有gcc编译器的标志或修改将返回行号和句子,当它遇到涉及模板的错误时解释错误的类型,但是不会打印模板扩展代码的页面,它总是跟随这样的错误.
例如,而不是像这样的错误:
temp.cc:9: error: ‘class std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >’ has no member named ‘hat’
Run Code Online (Sandbox Code Playgroud)
我想要这样的东西:
temp.cc:9: error: class has no member named hat.
Run Code Online (Sandbox Code Playgroud) 每当gcc找不到具有多个重载的函数的匹配重载时,它就会给出错误的行和行,解释尝试了哪个重载以及为什么不使用它.
虽然它通常是有用的,但它通常也不是,因为问题只是呼叫站点的简单错字.在这种特殊情况下,它甚至没有帮助,因为甚至需要花费相当长的时间来找出哪一行最终导致了这个问题.
是否有任何命令行切换到GCC以缩短输出并且仅包括实际的触发线?例如:
#include <string>
#include <iostream>
struct Z{};
void foo() {
std::string s;
Z z;
std::cout << z; // typo - meant s
}
Run Code Online (Sandbox Code Playgroud)
请参阅错误输出:https://godbolt.org/g/wz5vL2
小额补充:第三方解决方案(STLFilt,gccfilter等)不适合这项法案,因为a)我的工作环境不欢迎安装第三方应用程序,b)它们往往无法维护并停止使用下一个编译器升级