草庐IT

clang-omp

全部标签

c++ - lambda : GCC bug and/or Clang bug? 中捕获变量的 decltype()

我检查了GCCbuglist和Clangbuglist并且还没有看到任何相关内容。ThisWandboxlink显示一些C++11/C++14代码为各种类型的x执行decltype(x)和decltype((x))被lambda捕获。GCC和Clang对这段代码给出了不同的答案。如果有的话,哪一个是正确的?这是有问题的片段://insidemain()inti=42;int&j=i;[j=j](){static_assert(std::is_same::value,"");//Astatic_assert(std::is_same::value,"");//B}();[=](){sta

c++ - Clang 与 MSVC : Treatment of template function prototypes

下面是一段测试代码,我分别用MSVC和Clang来对比编译结果。每个编译器的输出如下所示。MSVC假装未使用的模板声明甚至不存在。Clang产生错误。问题是,哪个编译器在这里最符合标准?我见过依赖MSVC行为的遗留生产代码,但我不确定它是否可以继续依赖。classS{structP{};};templateS::PBat(T);在MSVC10中干净地编译:E:\clangbuild\bin\Release>cl/c/nologotest.cpptest.cpp在Clang中产生错误:E:\clangbuild\bin\Release>clang++test.cpptest.cpp:9:

c++ - 'using' 语句用 g++ 编译,用 clang 编译失败

我有以下结构的代码(在现实中当然要复杂得多,尤其是“Base”是三行代码,但我试图捕获它的要点):templateclassA{};templateclassB{public:B(){};};templateclassC:publicB>{public:usingBase=B>;usingBase::B;};staticconstCc{};代码可以通过g++正常编译g++-ctest.cpp-std=c++11但是,使用clang++我收到一条我不太理解的错误消息clang++-ctest.cpp-std=c++11test.cpp:14:14:error:dependentusing

c++ - 使用模板调用运算符和通用 lambda 重载结构 - gcc vs clang

我发现了一个代码片段,它可以在clang++4(和主干)中正常编译和工作,但在g++7(和主干)中无法编译。假设我有以下struct类型:structa{voidfoo(){}};structb{voidbar(){}};structc{voidbar(){}};我想用lambda创建一个重载集,它显式处理a,而b和c被使用auto参数的通用lambda“捕获”:autool=overload([](ax){x.foo();},[](autox){x.bar();})当我调用ol(a{})时:clang++编译并按预期运行:a“匹配”第一个lambda,而b和c匹配第二个。g++编译失

c++ - 如何使 C++(共享)库与 clang 和 GCC 兼容?

我已经编写了相当丰富的C++11库,并且我计划允许从我的网站下载预编译版本。所以我设置了一个自动构建,它使用clang编译库并使其可供下载,但这暴露了一个问题:如果我尝试将clang编译的库与GCC一起使用,我会得到undefinedreference(主要是与std::string相关)。我认为这与GCC5.1中的GCC双ABI更改有关,但我不确定如何修复它。我的问题是,为了使C++库与clang和GCC兼容,我应该设置什么标志,或者我应该遵循什么做法?或者我应该放弃并编译两个单独的库吗? 最佳答案 正如在几个地方(例如here)

c++ - clang 交错源代码和程序集

想知道是否可以从clang生成交错的源代码和程序集?我正在寻找等同于gcc命令的东西(如http://www.fclose.com/240/generate-a-mixed-source-and-assembly-listing-using-gcc/所示)gcc-Wa,-adhln-gsource_code.c>assembly_list.s我访问过链接:HowdoyougetassembleroutputfromC/C++sourceingcc?但它甚至列出了程序集-但没有交错。此外,VisualStudio确实为您提供了相当不错的交错汇编输出,详情请参见:Howtoviewthea

c++ - 让 clang-tidy 修复头文件

我正在将当前使用gcc编译的项目移动到clang,并且有一堆gcc没有生成的警告(-Winconsistent-missing-override)。clang-tidy用于修复*.cpp文件中的这些错误,但是它不会触及hpp文件,因为编译命令是'在数据库中找到(如我所料)。我正在使用ninja构建项目,并使用ninja-tcompdbcccxx>.build/compile_commands.json生成编译数据库。我试过运行:clang-tidy-3.6-p.build/\$(findsrc/-name*.cpp)\$(findsrc/-name*.hpp)\--checks=mis

c++ - 使用别名模板时无法将 `std::unique_ptr` 分配给 clang 中的基类

以下代码在gcc4.9.3和clang3.7.1上编译和运行得很好//std::unique_ptr#include//Templateclassfortemplate-templateargumentstemplatestructBar{};//BaseclasstemplateclassXX>structBase{};//DerivedclassthatoperatesonlyonBartemplatestructDerived:publicBase{};//Holdstheunique_ptrtemplateclassXX>structFoo{std::unique_ptr>fo

c++ - 列出引用 : is GCC or Clang correct? 的初始化

给出这个例子:intg_i=10;structS{operatorint&(){returng_i;}};intmain(){Ss;int&iref1=s;//implicitconversionint&iref2={s};//clang++error,g++compilesfine://`s`isconverted//toatemporaryintandbindswith//lvaluereferenceint&&iref3={s};//clang++compiles,g++error://cannotbindrvaluereference//tolvalue}错误如注释中所述。gc

c++ - 为什么在 C++1z 的这个例子中,clang 和 g++ 为 a1.v 和 a2.v 打印 0?

请参阅[class.base.init]/11中的示例structA{A()=default;//OKA(intv):v(v){}//OKconstint&v=42;//OK};Aa1;//error:ill-formedbindingoftemporarytoreferenceAa2(1);//OK,unfortunatelyclang和g++都编译代码(clang带有警告),但我想了解为什么它们为成员a1.v打印0和a2.v?参见demo. 最佳答案 他们打印0并不重要。对于a1,初始化的格式不正确。对于a2,您将引用绑定(bi