草庐IT

clang_complete

全部标签

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++ - 如何让 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++ - Variadic 模板元编程 : a bug in clang++ or g++?

考虑这种将数组从一种类型转换为另一种类型的疯狂的可变参数模板:#include#includetemplateclassConverter{public:template::type>staticconstexprconststd::arrayconvert(constArraysource,constTypes&...values);template::type>staticconstexprconststd::arrayconvert(constArray,constTypes...values);};templatetemplateconstexprconststd::array

c++ - 使用 cmake、clang 和 llvm 为 visual studio 构建工具链

我在谷歌上搜索了很多,但没有找到合适的答案,所以我在这里问。要从现有代码开发一个应使用cmake和clang编译的c++项目,我需要采取哪些步骤?我还想拥有所有不错的功能,例如自动完成和使用断点进行调试以及逐步调试。 最佳答案 查看与VisualStudio集成的Windows构建的最新LLVM快照页面here.有一个安装程序和一个代码格式化插件。您不会获得自动完成功能,并且Clang/LLVM与VisualStudio中的调试无关(除了如果您使用Clang编译它可能无法工作)。另见thisinterestingblogpost在拥

c++ - clang 和 gcc 中的这个警告似乎不正确

我相信BjarneStroutrup的新书TCPL第4版第66页中的示例有一个小错误,因为classVector_container没有std::initializer_list构造函数。错误信息here证实了这一点。#includeclassVector{double*elem;intsz;public:Vector(ints):elem{newdouble[s]},sz{s}{for(inti=0;i!=sz;++i)elem[i]=0;}Vector(std::initializer_listlst):elem{newdouble[lst.size()]},sz(lst.size

c++ - Clang 为直觉上应该等效的表达式提供非常不同的性能

有人可以向我解释这些表达式之间的这些显着性能差异,我希望它们能提供相似的性能。我在Release模式下使用AppleLLVM版本5.1(clang-503.0.38)(基于LLVM3.4svn)进行编译。这是我的测试代码(只需将CASE更改为1、2、3或4来测试自己):#include#include#defineCASE1inlineintfoo(intn){return#ifCASE==1(n%2)?9:6#elifCASE==2(n%2)==true?9:6#elifCASE==36+(n%2)*3#elifCASE==46+bool(n%2)*3#endif;}intmain(