草庐IT

c++ - 为什么尽管使用了 -isystem,但 clang 在我的标题上报告了警告,而 gcc 没有报告?

与thisquestion稍微相关但不一样。在ArchLinux上使用clang7.0.1。我喜欢干净的代码,所以我想启用所有警告并将它们视为错误。问题是我的构建中有一些自动生成的文件不是没有警告,例如:生成/foo.hinlinevoidfoo(intunused){//warning:unusedparameter'unused'}生成/foo.cc#include"foo.h"//Thereisactualcodehere,butitdoesn'tmatter.由于这些文件是由第三方工具生成的,我不能轻易修改它们,所以我使用-isystem禁止来自generated的所有警告目录

c++ - gcc 与 clang : noexcept parsed in unused template specialization when static casting

我正在尝试将函数指针静态转换为特定函数重载,但似乎clang仍会解析(未使用的)模板特化的noexcept语句,从而生成编译器错误。如果未使用相应的函数重载,GCC似乎并不关心noexcept。templatevoidfun(T)noexcept(T(1)){}voidfun(int){}voidfun(int*){}intmain(){inta;fun(&a);//callingworksfinefun(a);static_cast(&fun);//staticcastingdoesn't}https://godbolt.org/z/ixpl3f这里是哪个编译器出错了?当将函数指针转

c++ - 由于 libjsoncpp0,travis 上的 Clang 6 中断

由于以下问题,我们构建的travisci已损坏:Thefollowingpackageshaveunmetdependencies:clang-6.0:Depends:libjsoncpp0(>=0.6.0~rc2)butitisnotinstallableE:Unabletocorrectproblems,youhaveheldbrokenpackages.apt-get.diagnosticsapt-getinstallfailedsudoaptinstalllibjsoncpp0不起作用,因为libjsoncpp0不存在;我也试过sudoaptinstalllibjsoncpp-

c++ - 使用共享库运行程序时出错

有这样的代码:#include#includeusingnamespacestd;intmain(intargc,char**argv){CXIndexIndex=clang_createIndex(0,0);CXTranslationUnitTU=clang_parseTranslationUnit(Index,0,argv,argc,0,0,CXTranslationUnit_None);for(unsignedI=0,N=clang_getNumDiagnostics(TU);I!=N;++I){CXDiagnosticDiag=clang_getDiagnostic(TU,I)

c++ - Xcode 4.2 无法识别 C++ 原始字符串文字?

我正在尝试学习C++11的基础知识。我的mac上有Xcode4.2,它使用LLVM3.0编译器。根据我的阅读,它应该支持原始字符串文字(即R"(...)"),但是当我尝试用它们编译一些东西时,它向我吐了口水。我已经为c++0x设置了它(我打开了-std=c++0x和libc++库)并且我知道它可以与其他c++0x功能一起使用,例如范围-循环。这里有什么我遗漏的吗? 最佳答案 可悲的是Appleclang3.0(Xcode4.2附带)!=clang3.0(whichsupportsrawstringliterals。)您需要等待更高版

c++ - 如何让 Clang Complete 显示函数参数?

当使用ClangComplete自动完成时,我想让它也显示函数签名。例如,如果我声明以下函数:intadd(inta,intb){intresult=a+b;returnresult;}当我启动ClangComplete时,我不仅希望函数名称在自动完成结果中弹出,而且它的参数也是如此:add(inta,intb). 最佳答案 试试这个setconceallevel=2setconcealcursor=vinletg:clang_snippets=1letg:clang_conceal_snippets=1"Thesingleonet

c++ - Clang 访问修饰符顺序和 decltype

我一直在考虑创建一个同步器助手模板类,它基于HerbSutter在这个talk中的包装器类的想法。这在msvc中不起作用(除非我们删除大括号初始化)但是当大括号初始化被删除时就没问题了。在clang/gcc(ubuntu12.10,gcc4.7.2,clang(3.2)selfbuiltwithlibc++)中,private访问修饰符似乎必须出现在public之前:这看起来有点奇怪。gcc的错误是错误:“t_”未在此范围内声明clang是error:useofundeclaredidentifier't_'autooperator()(Ff)const->decltype(f(t_)

c++ - clang++ - 将模板类名视为类范围内的模板

似乎clang++(我试过clang3.2)将模板类的名称视为实例化类,而不是类范围内任何事件的模板。比如下面的代码templateclassT>classA{};templateclassB{Amember;//^----clang++treatsBasaninstantiatedclass//butIwantittobeatemplatehere//thiscodecouldcompileing++};intmain(){Bb;return0;}我应该怎么做才能编译它? 最佳答案 C++03以这种方式解析B(称为injected

c++ - 在 GCC 4.7.2 和 Clang 3.2 中显然缺少 getline() 的重载,将 RRef 流式传输

我在尝试将getline()与临时流对象一起使用时遇到了意外的编译错误:#include#include#includeusingnamespacestd;intmain(){stringinput="hello\nworld\nof\ndelimiters";stringline;if(getline(stringstream(input),line))//ERROR!{cout看起来不存在接受对流对象的右值引用的getline()重载。如果我将main()更改为使用左值,它会按预期编译和运行:intmain(){stringinput="hello\nworld\nof\ndeli

c++ - 使用数组作为元组成员 : Valid C++11 tuple declaration?

下面的代码可以在G++4.7.2中正常编译:#includestd::tuplex;但是,使用clang++3.2会产生以下错误:错误:数组初始化器必须是一个初始化器列表。如果我从元组声明中删除float类型,错误就会消失。上面的元组声明是否有效?($CXX-std=c++11-c文件.cpp) 最佳答案 我认为标准中没有任何内容禁止您的声明。但是,一旦尝试初始化、复制、移动或分配元组,就会遇到问题,因为对于这些操作,元组的所有成员类型都必须能够用作初始化器、可复制构造、可复制分配和移动分配,分别(§20.4.2.1)。这些都不是数