is_same 上的 Cppcheck 语法错误与模板
Posted
技术标签:
【中文标题】is_same 上的 Cppcheck 语法错误与模板【英文标题】:Cppcheck syntax error on is_same with template 【发布时间】:2020-05-25 18:09:26 【问题描述】:clang、clang-tidy 和 gcc 都很好,并且代码可以工作(当然在另一个上下文中),但是如果我使用 cppcheck,就会突然出现语法错误。
cppcheck --enable=all --inconclusive --std=c++11 --std=posix --suppress=missingIncludeSystem main.cpp
--> 最小的工作样本-->
#include <iostream>
#include <list>
#include <type_traits>
#include <vector>
template <class T>
void operate(T &container)
if constexpr( std::is_same<T, std::vector<int>>::value)
container.sort();
return;
int main()
std::list<int> vv-1,4,-4,0,4,2,5,-2;
operate(vv);
return 0;
结果 --> [main.cpp:19]: (error) 语法错误
版本 --> Cppcheck 1.82
欢迎任何帮助,谢谢:-)
【问题讨论】:
我从未使用过cppcheck
,但你将--std=c++11
传递给它,你的代码是C++17
:) 好吧,我不确定我是否可以将 cppcheck 设置为 c++17,我尝试过但失败了,有没有办法?即使我在没有 c++11 参数的情况下这样做,它也不起作用:/ ...ahm 默认为 14,因为我阅读
@Hyperion 你有两个选择:1) 不要使用不支持 C++17 的工具 2) 不要使用 C++17
@eerorika 谢谢你们。我想你们都是对的,我不承认 cppcheck 只支持 c++14 :-)
根据this doc page,甚至 C++20 也是一种选择(尽管您可能需要更新您的工具版本)。不过,我不得不说我发现官方文档在这方面有点欠缺。
【参考方案1】:
我是一名 Cppcheck 开发人员。有关信息,我无法使用最新的 Cppcheck 进行复制。您使用旧的 Cppcheck 版本吗?
【讨论】:
您好 Daniel,感谢您查看此内容 :o) 正如我之前所写,我使用的是 1.82。在故障排除和给出我的问题的答案的过程中,我发现 2.0 已经准备就绪。只要我有一个小时或更长时间,我就会尝试并为我的旧工作机器构建(希望)一个稳定的机器:) Cppcheck 1.84 错误消失。以上是关于is_same 上的 Cppcheck 语法错误与模板的主要内容,如果未能解决你的问题,请参考以下文章
使用std :: is_same和operator ||进行编译错误
C++11的std::is_same和std::decay使用与源码解析