gcc 编译器标志在编译期间抑制模板扩展的模板错误?

Posted

技术标签:

【中文标题】gcc 编译器标志在编译期间抑制模板扩展的模板错误?【英文标题】:gcc compiler flag to suppress template expansion for template errors during compilation? 【发布时间】:2011-08-06 00:11:36 【问题描述】:

我想知道 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’

我想要这样的东西:

temp.cc:9: error: class has no member named hat.

【问题讨论】:

通过 sed 或 perl 脚本管道输出? 试试 Clang - 这是 clang 前端的设计特点之一。 【参考方案1】:

没有。编译器试图帮助您识别导致问题的类。它只知道该类是其模板类型的扩展。

【讨论】:

它试图提供帮助,但 STL 用户无需查看 STL 开发人员所需的所有 char_traits....【参考方案2】:

gcc 对此没有标记,但sed 可以轻松解决此问题。

【讨论】:

以上是关于gcc 编译器标志在编译期间抑制模板扩展的模板错误?的主要内容,如果未能解决你的问题,请参考以下文章

使用 ARM GCC 编译列表迭代器时的模板编译时错误

从可执行文件中找出编译优化标志

gcc 编译错误:模板类表中嵌套类 A ​​的成员在嵌套朋友类中不可见。为啥?

为啥这个私有模板函数会编译? -> 编译器错误 VS 2009

gcc 编译带有大量模板参数的模板类时出错

奇怪的 C++ 模板问题