草庐IT

clang_analyzer

全部标签

c++ - clang-format:在 lambda 函数和外部 block 的大括号之前中断

我有一个lambda函数,格式如下:autocb=[](std::stringconst&_param){std::cout我想将左大括号保留在新行上,但clang-format总是将它放在第一行的末尾。是否可以配置clang-format以遵循上述样式?我当前配置的相关部分如下所示:BraceWrapping:AfterClass:trueAfterControlStatement:trueAfterEnum:trueAfterFunction:trueAfterNamespace:trueAfterStruct:trueAfterUnion:trueBeforeCatch:true

带有 enable_if : different behaviour with g++ and clang 的 C++ 模板重载

在解决基类的模板化成员函数的重载时,我观察到g++(5.2.1-23)和clang(3.8.0)之间的不同行为,-std=c++14.#include#includestructBase{templateautoa(Tt)->void{std::coutstructDerived:publicBase{usingBase::a;templateautoa(Tt)->std::enable_if_t{std::coutd;d.a(1);//failswithg++,prints"true"withclangDerivedd2;d2.a(1);//failswithclang++,prin

c++ - 部分特化的默认参数 [Clang yes, GCC no]

为什么下面的代码用clang编译而不用g++4.9#includetemplatestructA;templatestructA,T2,T3>{inta;};intmain(){A,double>a;a.a+=3;}http://coliru.stacked-crooked.com/a/c7800f49ba5aac43g++没有找到合适的特化并提示“类型不完整”。我想知道,默认参数typenameT3=int应该适用于特化(还是只适用于完全特化?) 最佳答案 模板A和A未完整定义,因此您无法使用您的成员,您可以通过这种方式解决定义此

c++ - 我相信 clang 错误地允许内联友元函数访问封闭范围内的数据。 gcc 和 vs2013 都拒绝此代码

友元函数f无权访问封闭类A的私有(private)成员。#includeclassA{conststaticintp=1;classB{friendvoidf(){std::cout至少,我认为N4140中的[class.nest]/4是这样说的(见下文)。§9.7/4Likeamemberfunction,afriendfunction(11.3)definedwithinanestedclassisinthelexicalscopeofthatclass;itobeysthesamerulesfornamebindingasastaticmemberfunctionofthatcl

c++ - 如何通过 Clang 和 LibTooling 使用标准库

我想使用Clang和LibTooling来创建一些C++源代码分析和转换工具。我在this之后构建了Clang和LibTooling教程,我已经能够运行和创建一些分析工具,并使用我构建的Clang二进制文件编译C++程序。但是,如果我包含标准库中的头文件(在源文件或我的工具中),我会在编译或运行源文件/工具时遇到问题。例如,如果我对以下C++源文件运行clang-check:#includeintmain(){std::cout我收到“fatalerror:找不到‘iostream’文件”。(注意:我可以编译C++程序,例如带有用户定义类的程序,但不能编译使用标准库的C++程序。)为了

c++ - 在折叠表达式中扩展参数包作为 lambda 捕获的一部分 - gcc 与 clang

这个问题在这里已经有了答案:Expandingparameterpackintolambdawithfoldexpression-gccvsclang(2个回答)关闭4年前。考虑以下代码片段:templatevoidfoo(){([i=Is]{}(),...);}clang++(trunk)使用-std=c++17成功编译代码g++(trunk)编译失败,错误如下::Infunction'voidfoo()'::4:11:error:parameterpacksnotexpandedwith'...':([i=Is]{}(),...);^~:4:11:note:'Is':4:16:er

c++ - CMake clang 和 c++0x

使用clang++时,如何让CMake在编译时使用-std=c++0x标志,但在链接时不使用?还有其他几篇关于使用clang作为编译器的帖子,但我没有找到任何关于设置c++标准的提示。这是我尝试过的:CMakeLists.txt:project(test)add_executable(mainmain.cxx)ClangOverride.txt:SET(CMAKE_C_FLAGS_INIT"-Wall-std=c99")SET(CMAKE_C_FLAGS_DEBUG_INIT"-g")SET(CMAKE_C_FLAGS_MINSIZEREL_INIT"-Os-DNDEBUG")SET(

带有 Clang 或 GCC 的 Mac 上的 C++11

我在MoutainLion上安装了Xcode4.5.2,并且我安装了最新的“命令行工具”,但是当我尝试使用g++或clang++进行编译时(以及选项-std=c++11-stdlib=libc++)我得到一个错误。使用g++:cc1plus:error:unrecognizedcommandlineoption"-std=c++11"cc1plus:error:unrecognizedcommandlineoption"-stdlib=libc++"使用clang++:clang:error:invaliddeploymenttargetfor-stdlib=libc++(requir

c++ - Clang 中不明确的运算符重载

考虑以下几点:templatestructC{};templatevoidoperator+(C&,U);structD:C{};structE{};templatevoidoperator+(C&,E);voidF(){Dd;Ee;d+e;}此代码在GCC-7和Clang-5上都能正常编译。operator+的选定重载是structE的重载。现在,如果发生以下变化:/*Put`operator+`insidetheclass.*/templatestructC{templatevoidoperator+(U);};也就是说,如果operator+被定义在inside类模板中,而不是o

c++ - 奇怪的 Clang 行为

看看这段代码:#include#includevoidfoo(int(*f)()){std::coutstd::string{returnstd::string("bla");};foo(bar);return0;}编译g++-otesttest.cpp-std=c++11导致:bla就像它应该做的那样。用编译它clang++-otesttest.cpp-std=c++11-stdlib=libc++导致:zsh:illegalhardwareinstruction./test并用它编译clang++-otesttest.cpp-std=c++11-stdlib=stdlibc++还导