草庐IT

clang_complete

全部标签

c++ - Clang 不优化这段代码有什么原因吗?

考虑我在thisquestion中找到的这个函数:voidto_bytes(uint64_tconst&x,uint8_t*dest){dest[7]=uint8_t(x>>8*7);dest[6]=uint8_t(x>>8*6);dest[5]=uint8_t(x>>8*5);dest[4]=uint8_t(x>>8*4);dest[3]=uint8_t(x>>8*3);dest[2]=uint8_t(x>>8*2);dest[1]=uint8_t(x>>8*1);dest[0]=uint8_t(x>>8*0);}由于x和dest可能指向相同的内存,编译器不允许将其优化为单个qwor

c++ - 在 Clang/MacOS X 上捕获派生异常类型失败

我有一个C++库,我试图用Clang在MacOSX上运行它。该库由一个DLL和一个单元测试可执行文件组成。它使用GCC和MSVC编译得很好,使用GCC,我使用以下设置:库是用-fvisibility=hidden编译的所有公开的类都明确标记为__attribute__(visibility("default"))该库有一些异常类,派生自std::runtime_error。所有此类类都标记为默认可见性。有一个根类LibraryException,从中派生出更具体的异常。在GCC上,我使用-std=c++0x,使用clang,库和单元测试可执行文件都是使用-stdlib=libc++-s

c++ - clang 的 c++11 支持可靠吗?

我在尝试混合clang(AppleLLVM版本6.0(clang-600.0.56)(基于LLVM3.5svn,目标:x86_64-apple-darwin14.0.0)、c++11和CGAL时遇到了一个有趣的问题(通过MacPorts)。似乎我是否调用std::vector::reserve将决定我的程序是否会编译。我已将问题缩减为一个最小的示例(与CGAL示例一样最小):#include#include#include#include#include//CGAL::Epeckworksfine,suggestingtheproblemisinCGAL::EpicktypedefCG

c++ - 为什么在 clang -O3 上有这种行为?

这是一个计算整数的约数的小程序。该程序确实可以正常工作。然而,问题是,在ClangC++编译器(版本3.3,主干180686)的当前主干的-O3优化标志下,程序的行为发生了变化,结果不再正确。代码代码如下:#includeconstexprunsignedlongdivisors(unsignedlongn,unsignedlongc){//Thisissupposedtosum1anytimeadivisorshowsup//intherecursionreturn!c?0:!(n%c)+divisors(n,c-1);}intmain(){//HereIprintthenumber

c++ - Clang 链接器不查看 LD_LIBRARY_PATH

我正在尝试使用clang(3.0)构建和链接一个基于cmake的C++项目。该项目链接到安装在自定义目录/my/dir/中的几个库。此目录包含在LD_LIBRARY_PATH和LIBRARY_PATH环境变量中。项目构建并与g++链接良好。cmake生成并执行的链接命令如下所示:/usr/bin/clang++-O3stuff.cpp.o-ostuff-rdynamic-lmylibld然后提示以下消息:/usr/bin/ld:cannotfind-lmylib每当我手动添加-L/my/dir/时,上面的链接命令运行良好。有没有一种方法可以在不指定-L标志的情况下进行链接?

c++ - 是否有作为一组 Clang 工具实现的 C++ 重构模式?

所以我发现nicevideoonClangtooling...并且不禁想知道:是否有用于完整项目美化和清理的示例代码库/编译工具套件(如C#resharper)?项目规模的代码格式,例如:行尾的额外空间、成员/类命名的统一、{}括号在if之后的放置方式等? 最佳答案 Clang的libtooling相当新,因此目前没有太多基于它的东西。另外,根据我的经验,链接起来很痛苦(没有clang版本的llvm-config并且在tutorials中,开发人员似乎认为人们会在完整的clang存储库中构建他们的工具,而不是作为单独的项目.Clan

c++ - 这是 clang c++11 std::regex_match 的一个特性还是一个错误?

我注意到如果第一个模式是第二个模式的开始部分(在clang3.5和clang3.8上测试),则包含两个带OR条件的模式的正则表达式不匹配示例字符串:std::regex_match("ab",std::regex("(ab|a)"))==true但是std::regex_match("ab",std::regex("(a|ab)"))==false我认为true在这两种情况下在逻辑上都是正确的。Clang和OSX:$cat>test.cpp#include#include#includeintmain(){std::coutClang和FreeBSD:$cat>test.cpp#inc

c++ - 当重载具有多重继承的函数时,GCC 说调用它是不明确的,但 Clang 和 MSVC 没有

我正在使用这个变体库:https://github.com/cbeck88/strict-variant.它提供了一个类似于std::variant和boost::variant的类。鉴于此struct:structS{explicitS(double){}};我想这样做:strict_variant::variantv=2.0;这适用于Clang5.0.1和MSVC19.12.25831.00,但无法使用GCC7.2.1进行编译。我查看了库的代码并将问题简化为:#includestructS{constexprS(){}constexprexplicitS(double){}};te

c++ - SFINAE 方法在 clang 中完全禁用基类的模板方法

#include#includestructB{template::value>*=nullptr>voidfoo(T){std::cout::value>*=nullptr>voidfoo(T){std::cout假设我们想在派生类D中公开两个foo()重载。gcc和VisualStudio编译并按我预期的那样打印“B::foo”。但是我得到了clang的编译错误:prog.cc:22:7:error:nomatchingmemberfunctionforcallto'foo'd.foo(2);~~^~~prog.cc:14:10:note:candidatetemplateigno

c++ - 临时对象的 Clang 6 中的模板参数推导被破坏

在Clang6中,临时对象的模板参数推导似乎被打破了。g++8.1.0正确编译和运行示例。Clang6.0.0和6.0.2都在指示的行出现错误并显示此消息:error:expectedunqualified-idPrint{1,"foo"s,2};/**********BrokeninClang**********/所有其他线路均正常工作。无论使用-std=c++17还是-std=c++2a,两种情况下的行为都是相同的。TheClangc++StatusPage表示从Clang5(P0091R3、P0512R0)开始实现了模板参数推导。这是一个错误吗?是否有解决方法(例如编译器标志,不