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 语法错误与模板的主要内容,如果未能解决你的问题,请参考以下文章

cppcheck使用大全

cppcheck 错误与我看到的不符

使用std :: is_same和operator ||进行编译错误

C++11的std::is_same和std::decay使用与源码解析

C++11的std::is_same和std::decay使用与源码解析

Vim 和 Cppcheck 应该使用哪种错误格式?