草庐IT

iphoneos-clang

全部标签

c++ - Clang 模块与 std <iterator> 和 <boost/move/iterator.hpp> 交互

(有关我正在使用的特定版本的Boost和Clang的信息,请参阅问题结尾)使用新的实验性-fmodules从master/HEAD在Clang中编译功能,使用如下所示的命令行选项编译以下文件时出现构建错误:#include#include编译命令及错误:anhall@leviathan:/bin/clang++-ofile.o-cfile.cpp--std=c++1z-stdlib=libc++-fmodulesInfileincludedfromfile.cpp:2:Infileincludedfrom/usr/local/include/boost/move/iterator.hp

c++ - 您如何向 clang 添加一个新关键字,一个将被视为主要关键字的关键字?

如何将新关键字添加到clang中?new关键字应该是函数限定符。声明部分去哪里?谢谢。 最佳答案 你必须将它添加到include/clang/Basic/TokenKinds.def,然后将一个新的case添加到ParseDeclarationSpecifiers(...)。可能更简单的选择是定义一个新属性,然后使用#defineyour_new_qualifier__attribute__((your_new_attribute))否则,您必须将此限定符支持添加到AST,这可能容易出错,而属性会自动传播到同一函数的各种声明中。

c++ - 我的 LLVM 和 clang (OSX) 版本是什么?

在MacOS上,如果我运行clang--version,我得到:AppleLLVMversion6.0(clang-600.0.34.4)(basedonLLVM3.5svn)Target:x86_64-apple-darwin14.0.0Threadmodel:posix自LLVMofficialpage建议当前的LLVM版本是3.5,似乎Appleclang版本控制与开源LLVM不同。输出(basedonLLVM3.5svn)表明我的机器上可能也是3.5。现在我到了这里,因为我想使用g++-std=c++14main.cc编译一个C++14文件。Thispage建议此选项适用于cl

c++ - 为什么这个基本线程程序会因 Clang 而失败,但会通过 g++?

我有一个使用线程的简单程序。在Clang中,我遇到了一堆令人困惑的无关错误。这是程序:#include#include#includeintmain(){std::packaged_tasktask([]{return1;});std::futureresult=task.get_future();task();std::cout错误:error:nomatchingconstructorforinitializationof'duration'(aka'std::chrono::duration>'):_d(_t.time_since_epoch())note:ininstantia

c++ - 没有相应编译器标志的 Clang/GCC 编译器内部函数

我知道有类似的问题,但是用不同的标志编译不同的文件是不可接受的解决方案,因为它会很快使代码库复杂化。回答“不,不可能”即可。是否可以在任何版本的Clang或GCC中为SSE2/3/3S/4.1编译内在函数,同时只允许编译器使用SSE指令集进行优化?编辑:例如,我希望编译器将_mm_load_si128()转换为movdqa,但编译器绝不能发出此指令除了这个内部函数之外的其他地方,类似于MSVC编译器的工作方式。EDIT2:我有动态调度程序和几个版本的单一功能,具有使用内部函数编写的不同指令集。使用多个文件会使维护变得更加困难,因为相同版本的代码将跨越多个文件,并且有很多此类函数。EDI

c++ - clang 和 gcc 中的 Constexpr 复合赋值运算符

我有以下代码:main.cpp#include#includeenumclassFooEnum:uint8_t{Foo1=0,Foo2=1};constexpruint32_t&operator|=(uint32_t&lhs,FooEnumrhs){returnlhs|=1u(rhs);}intmain(){uint32_tbar{0};bar|=FooEnum::Foo1;}所以本质上,|=运算符应该采用枚举并设置位,其位置对应于它的整数值。当在fedora21上用clang++3.5.0编译时,一切正常,但是当用g++4.9.2编译时,它抛出一个错误,说这不是一个常量表达式:mai

c++ - ld : symbols not found for architecture x86_64, clang: 链接器命令失败

我正在尝试使用Homebrew软件下载和构建诸如boost、ceres-solver之类的软件包。发生的事情是我将尝试编译代码,没有任何特殊标志(g++foo.cpp-ofoo-I/usr/local/...并且我也尝试过clang++)并且我始终收到此错误:Undefinedsymbolsforarchitecturex86_64:...ld:symbol(s)notfoundforarchitecturex86_64clang:error:linkercommandfailedwithexitcode1(use-vtoseeinvocation)所以我环顾四周,解决方案是使用-st

c++ - 匿名临时对象和类模板参数推导 - gcc vs clang

考虑以下代码片段:templatestructfoo{foo(T){}};intmain(){foo{0};}g++7愉快地创建了一个foo类型的临时对象,推导出T=int。clang++5和6拒绝编译代码:error:expectedunqualified-idfoo{0};^liveexampleonwandbox这是一个clang错误,还是标准中有什么东西阻止类模板参数推导为未命名的临时对象启动? 最佳答案 Clang错误(#34091)来自[dcl.type.class.deduct]:Aplaceholderforaded

c++ - 为什么 clang 和 gcc 以不同的方式处理具有类内初始化的结构的支撑初始化?

我最近发现了clang和gcc的一个奇怪行为。我有一个结构(MyClass),它对其其中一个成员(active)使用类内初始化:structMyClass{intsomething;boolactive=true;};现在我尝试用大括号初始化这个类。使用clang,我可以决定是否在初始化列表中包含active(MyClassa={42,true};)或不包含(MyClassa={42};).但是使用gcc,我的代码只有在不包含active时才能编译。否则,我将得到以下编译器错误:error:couldnotconvert‘{42,true}’from‘’to‘MyClass’这是一个错

c++ - Clang 不会编译 gcc 会编译的模板特化

Gcc可以正常编译,但Clang(主干)拒绝并显示以下消息::7:8:error:classtemplatepartialspecializationisnotmorespecializedthantheprimarytemplate[-Winvalid-partial-specialization]https://godbolt.org/g/h8rsWCtemplatestructS{};templatestructS{};这段代码是否正确? 最佳答案 这仅在-std=c++17及更高版本中出现。“更专业”的确定需要synthes