草庐IT

clang_complete

全部标签

c++ - Clang 的链接器

我为Clang使用哪个链接器?如果我使用Clang或GNUlinker(ld)作为链接器,我得到了大量的错误,就好像我没有链接到标准库一样。g++$(OBJS)-o$(BINDIR)/obtap看来我必须使用g++来链接我的Clang对象。 最佳答案 我运行的是“clang”而不是“clang++”,这意味着它没有链接C++标准库。 关于c++-Clang的链接器,我们在StackOverflow上找到一个类似的问题: https://stackoverflo

c++ - C++ 标准中与 [basic.link]/7 相关的 GCC 和 clang 之间的矛盾结果

这段代码在clang中编译,namespaceA{voidf(){voidg();g();}}voidA::g(){}但如果g在命名空间A中定义如下,GCC只接受代码:namespaceA{voidf(){voidg();g();}voidg(){}}但我相信[basic.link]/7中没有任何内容不允许上面的第一个片段。 最佳答案 [basic.link]/p7,强调我的:Whenablockscopedeclarationofanentitywithlinkageisnotfoundtorefertosomeotherdecl

c++ - Clang 的 'type_visibility' 属性有什么作用,什么时候应该使用它?

它在libc++中用于许多模板类型,例如tuple_element、tuple等据我所知,除了commitmessage之外,没有关于它的作用的公开文档。介绍它和这个unittest在clang项目中。 最佳答案 此属性允许ELFvisibility类型和(可能)它的模糊链接对象(vtable、typeinfos)的控制与该类型的函数和数据成员的可见性分开。这使得typeinfos和vtable可以集中定位,例如,模板化多态类型的显式实例化,而不会强制该类型的私有(private)静态数据成员的默认可见性-为没有人实际访问的东西导出

c++ - 已删除 "general"案例的专用模板函数无法使用 g++ <=4.8.0 和 clang++ 编译

用老版本的g++(4.8.0,MinGW)编译项目,发现这段代码编译失败:templatevoidfoo()=delete;templatevoidfoo(){}intmain(){foo();return0;}如果发现基本情况已被删除,g++似乎甚至不会尝试寻找显式的特化。mitalia@mitalia:~/scratch$/opt/mingw32-dw2/bin/i686-w64-mingw32-g++-std=c++11buggy_deleted_template.cppbuggy_deleted_template.cpp:Infunction'intmain()':buggy_

c++ - XCode 4 中有哪些版本的 gcc、llvm 和 clang?

由于某种原因,这些信息很难获得。我们想开始使用大多数编译器中提供的一些C++0x功能。但是XCode3让我们有点退缩,因为它只提供GCC4.2和LLVM1.5。我们需要支持的所有其他平台要么已经具有初步支持C++0x功能的编译器,要么具有安装/升级编译器的相对轻松的方法。XCode4预览版可用,但仅限Mac或iOS开发者计划中的用户使用。 最佳答案 Xcode4GMgccversion4.2.1(AppleInc.build5666)(dot3)Appleclangversion2.0(tags/Apple/clang-134)(b

c++ - 用于模糊解析 C++ 的 Clang

是否有可能使用clang及其现有的libclangAPI来解析具有不完整声明的C++?IE。解析.cpp文件而不包括所有标题,动态推断声明。所以,例如以下文字:AB::Foo(){returnstuff();}将检测未知符号A,调用我的回调,使用我的魔法启发式扣除A是一个类,然后以与B和Foo等相同的方式调用此回调。最后,我希望能够推断出我看到B类的成员Foo返回A,而stuff是一个函数。或者类似的东西。上下文:我想看看我是否可以在不快速解析所有标题的情况下进行合理的语法突出显示和动态代码分析。[编辑]澄清一下,我正在寻找受到严格限制的C++解析,可能有一些启发式方法来解除一些限制。

c++ - noexcept 说明符神秘地破坏了编译(clang,gcc 不同意)

有问题的代码是#include#includetemplatevoidfor_each(F&&)noexcept{}templatevoidfor_each(F&&f,T&&v,Us&&...us){std::invoke(std::forward(f),std::forward(v));for_each(std::forward(f),std::forward(us)...);}voidfunc(void*)noexcept{}intmain(){for_each(func,nullptr);}它在gcc8上编译,但在clang6上失败并出现以下错误:/opt/wandbox/cla

c++ - 忽略 clang-tidy 中的系统头文件

tldr;>如何在clang-tidy中隐藏来自系统header的警告?我有以下最小示例源文件,它会在系统header中触发一个整洁的警告:#includeintmain(){std::promisep;p.set_value(3);}在Ubuntu17.04上使用clang-tidy4.0.0使用libstdc++7.0.1调用它:$clang-tidymain.cpp-extra-arg=-std=c++14产量Runningwithoutflags.1warninggenerated./usr/lib/gcc/x86_64-linux-gnu/7.0.1/../../../../

c++ - 哪个是更专业的模板功能? clang 和 g++ 对此有所不同

在使用可变参数模板时,跟随thisSOquestion(注意:不是必须去那里回答这个问题),对于以下模板重载函数,我遇到了clang(3.8)和g++(6.1)的不同行为:templatestructpack{};templateconstexprboolstarts_with(a,b){returnfalse;}templateclassPACK_A,templateclassPACK_B,typename...Ts1,typename...Ts2>constexprboolstarts_with(PACK_A,PACK_B){returntrue;}intmain(){std::c

c++ - 为什么clang不能启用所有的 sanitizer ?

Clang有各种sanitizer,可以打开以在运行时发现问题。但是,有些sanitizer我不能一起使用。这是为什么?clang++-3.9-std=c++1z-g-fsanitize=memory-fsanitize=address-omainmain.cpp1clang:error:invalidargument'-fsanitize=address'notallowedwith'-fsanitize=memory'这没什么大不了的,但是当我运行我的单元测试时,它花费的时间比它应该的要长,因为我为相同的测试创建了多个二进制文件,并分别运行它们中的每一个。clang++-3.9-s