草庐IT

CLANG_ARGS

全部标签

c++ - Variadic 模板代码可在 GCC 4.6 上编译,但不能在 clang 或 GCC 4.7 上编译

我有这段代码(从更复杂的版本简化而来):templateclassTest{public:templatevoidprint(void(*function)(A2...,A1...)){}};voidtest_print(inta,floatb,doublec){}intmain(){Testtest;test.print(&test_print);}如果我在GCC4.6.3上使用g++-std=c++0xfilename.cpp编译它,它编译正常但是在clang3.0上使用clang++-std=c++0xfilename.cpp它抛出以下错误:filename.cpp:14:10:

c++ - Clang 中带有静态 constexpr 的奇怪的循环模板模式 (CRTP)

考虑我下面的简单示例:#includetemplateclassBase{public:staticconstexprinty=T::x;};classDerived:publicBase{public:staticconstexprintx=5;};intmain(){std::cout在g++中,这可以正常编译并按预期打印5。然而,在Clang中,它无法编译并出现错误nomembernamed'x'in'Derived'。据我所知这是正确的代码。我正在做的事情有问题吗?如果没有,是否有办法在Clang中完成这项工作? 最佳答案

c++ - 使用 clang 的 ThreadSanitizer 和 TBB 避免误报

有没有人试过clang'sThreadSanitizer与IntelThreadingBuildingBlocks(TBB)?到目前为止,我的经验是您会收到很多警告,即使对于相对简单的示例也是如此。不幸的是,其中许多似乎是误报。在thisanswer对于另一个ThreadSanitizer问题,建议使用抑制文件。这有帮助吗?是否有针对TBB或任何其他技术的抑制文件?(旁注:使用Helgrind,它看起来很相似。许多误报。) 最佳答案 当我在TSAN_OPTIONS中引用抑制文件时,我才让它工作。至少对我而言,仅在编译期间使用-fsa

c++ - 带有 O2 的 clang++ 的 undefined reference

我在一个项目上尝试CLang3.4和libc++,但在Release模式下出现奇怪的链接错误:/home/wichtounet/dev/eddic/src/ast/Operator.cpp:17:error:undefinedreferenceto'std::__1::basic_ostream>&std::__1::operator,std::__1::allocator>(std::__1::basic_ostream>&,std::__1::basic_string,std::__1::allocator>const&)'clang:error:linkercommandfail

c++ - 为什么 g++ 和 clang++ 之间的编译时间差异很大?

我遇到了一个talkslide在第12页有一个示例说明了在存在继承的情况下进行类型检查的困难。structa{typedefintfoo;};structa1:a{};structa2:a{};#defineX(b,a)\structa##1:b##1,b##2{};\structa##2:b##1,b##2{};X(a,b)X(b,c)X(c,d)X(d,e)X(e,f)X(f,g)X(g,h)X(h,i)X(i,j)X(j,k)X(k,l)X(l,m)X(m,n)n1::foomain(){}预处理后转化为:structa{typedefintfoo;};structa1:a{};

c++ - 使用 clang-format - 将空括号保持在同一行

我正在尝试配置clang-format,这样大括号通常会在它们自己的行上开始:voidfunc(){if(...){printf("TaDa\n");}}但我希望它在大括号为空时保持在一行中。(主要用于ctors):Bar::Bar(intval):_val(val){}目前它看起来像这样:Bar::Bar(intval):_val(val){}有什么想法吗?(经过编辑以使情况更清楚) 最佳答案 更新:万岁!现在可以使用Clang5.0或更高版本的自定义BreakBeforeBraces。请参阅documentation中的Spli

c++ - 类中定义的友元函数模板是否可供查找? clang++ 和 g++ 不同意

代码如下:structfoo{templatefriendfoof(){return{};}};intmain(){autox=f();//clang++can'tfindit,g++can.}clang++3.4给出:fni2.cpp:8:12:error:useofundeclaredidentifier'f'autox=f();//clang++can'tfindit,g++can.^1errorgenerated.g++4.9.0编译它,但我不认为它应该有。This是一个相关的问题,但没有明确的答案。第15.4.2/2,4节对此进行了讨论,但它们都没有提及类内定义的友元函数模板

c++ - 为什么我不能用 foo(char* args[]) 做 foo({"asd","asd1"})?

我正在阅读C++Primer,在第6.2节中它说:"Parameterinitializationworksthesamewayasvariableinitialization."然而当我这样做时:voidfoo(char*args[]){return;}intmain(){char*args[]={"asd","dsa"};//ok.foo({"asd","dsa"});//error.}这是为什么? 最佳答案 作为@T.C.在评论中指出,函数参数中的args被转换为char**因为函数不能将数组作为参数。既然你做不到char**

c++ - 如何查询clang++的默认include路径?

如何查询clang/clang++的默认include路径?我正在尝试使用自定义构建的clang编译器(支持OpenMP的编译器),但它似乎没有找到STL库:/usr/local/bin/clang++hello.cpphello.cpp:1:10:fatalerror:'iostream'filenotfound#include^1errorgenerated.通过使用IDE,回溯#includeiostream,最后使用-isystem选项,我得到了要在OSX10.9中编译的简单helloworld应用程序:/usr/local/bin/clang++-isystem/Librar

c++ - 有没有办法配置 clang-format 以将嵌套的命名空间声明保持在同一行?

在我工作的代码库中,我们总是这样声明嵌套的命名空间:namespacefoo{namespacedetail{//stuff}}//foo::detailnamespace我还没有找到一种方法来配置clang-formatnot将其分成多行:namespacefoo{namespacedetail{//stuff}}//foo::detailnamespace我试过BreakBeforeBraces配置,我研究了clang3.8中新的BraceWrapping配置,但都没有成功。是否可以在不使用//clang-format[on/off]注释代码的情况下执行此操作?