草庐IT

CLANG_ARGS

全部标签

c++ - clang:存在公共(public)虚拟继承时无法转换为私有(private)基础

我正在尝试编译以下代码(有点小的示例),文件test.cpp:#include#includeclassShared:publicstd::enable_shared_from_this{public:intprea;};classWidget:publicvirtualShared{inta;public:~Widget(){a=7;}};classContainer:virtualpublicWidget{};classList:privateContainer,virtualpublicWidget{public:intc;};intmain(intargc,char**argv

c++ - g++ 和 clang++ 推断函数模板返回类型的不同行为

另一个“g++和clang++之间谁是正确的?”C++标准专家的问题。下面的程序#includevoidfoo(intv){std::coutvoidbar(Tv,R(*fn)(T)){fn(v);}intmain(){bar(1,foo);}使用g++(6.3.0,但根据Wandbox也使用8.0.0)编译并运行,但是使用clang++(根据Wandbox,3.9.1,也使用6.0.0)编译它,我得到以下错误tmp_002-11,14,gcc,clang.cpp:29:4:error:nomatchingfunctionforcallto'bar'{bar(1,foo);}^~~tm

c++ - Clang 问题 : implicit type conversion at construction time

概要我正在努力使C++11代码与Clang兼容,并遇到了GCC>=4.6接受代码而Clang>=3.1不接受的情况。Clang认为候选构造函数不可行。详情这里是一个精简的例子来说明这个问题:#includetemplatestructT;templatestructT{typedefTsuper;constexprT(){}templateT(Args&&...){}};templatestructT:T{typedefTsuper;Headhead;T(Headarg):super(),head(std::move(arg)){}};structvoid_type{constexpr

c++ - Clang:模板推导失败 'double' 与 '<double>'

考虑以下代码,它使用带有可变参数的函数:#include//TypedeffunctiontypetemplateusingFunc=void(Output*...);//Functionrunnertemplatevoidrun_func(Func&func,Output*...output){for(inti=0;i用g++4.7.3编译它工作正常,运行产生1024.0正如预期的那样。使用icpc14.0.2编译会崩溃...templ.cc(21):internalerror:assertionfailed:lower_expr:badkind(shared/cfe/edgcpfe

c++ - 模板参数类型成员上的运算符 << 仅在 clang 中导致错误

我有这个例子:#include#include#includetemplateclassA{public:A(constT&t):m_t(t){}voidfoo(){std::coutType;std::ostream&operator(t)(t);returnos;}intmain(){Aa(Type{"ala","makota"});a.foo();return0;}用clang++(3.6)产生:test_clang.cpp:10:19:error:calltofunction'operator,std::basic_string>>::foo'requestedherea.fo

c++ - constexpr 唯一标识,使用 clang 编译但不使用 gcc

大家早上好!我正在重构一个事件队列。我四处寻找是否可以在编译时使事件ID唯一。我想出的方法适用于clang4.0.0,但使用g++6.3.1时会出现编译错误。想法是使用静态成员变量的地址来唯一标识各个类型,然后使用标记从类模板生成这些唯一类型。使用静态成员的地址作为类型id是一种相当普遍的技术,但使用模板来实现它意味着清除ODR。MSN在这里引用标准来表明这是一种有效的方法:Compile-timeconstantid我的问题是做这个constexpr。如果我删除constexpr并在运行时对其进行测试,一切都会按预期进行。但是,执行此constexpr会导致g++中的静态断言失败,提

c++ - 在 Windows 上使用 clang 编译 CUDA 时的重新定义

尽管question几乎相同已经问过,答案是针对OSX的,不再适用(而且真的很老套)。问题是在Windows上用clang编译cuda时,math_functions.hpp中有大量重定义。通过一些调查,显然cuda决定将其math_functions.hpp和math_functions.h函数放在namespacestd中(这是否合法??),并与cmath中的所有libstdc++函数和clang自己用于编译cuda的头文件发生冲突。我该如何处理?最好不要使用上一个问题中显示的hacky方式?旁注根据clang的documentation,clang可以基于__global__/_

c++ - 自动非类型模板参数 : ambiguous partial specializations in Clang

Clang(7,8,trunk)拒绝以下代码enumclassE{};inlinestaticconstexprautoe=E{};//inlinestaticconstexprautoe=nullptr;templateclassS;templateclassS{};templateclassS{};intmain(){Ss;}出现错误:error:ambiguouspartialspecializationsof'S'note:partialspecializationmatches[witha=0,b=0]templateclassS{};^note:partialspecial

c++ - 如何使用 Clang 从 C++ 字符串生成 AST?

我正在尝试使用Clang来操作C++源代码,但我在发现API时遇到了问题。我想获取一串C++源代码并从中生成一个AST;类似于:automyAst=clang::parse("autox=1+1;");有这方面的最小工作示例吗? 最佳答案 你可以试试下面的代码:std::unique_ptrAST(tooling::buildASTFromCode("autox=1+1;"));TranslationUnitDecl*DC=AST->getASTContext().getTranslationUnitDecl();if(DC){ll

C++ std::vector initializer_list 重载歧义 (g++/clang++)

考虑以下代码:#include#defineBROKENclassVar{public:#ifdefBROKENtemplateVar(Tx):value(x){}#elseVar(intx):value(x){}#endifintvalue;};classClass{public:Class(std::vectorarg):v{arg}{}std::vectorv;};无论BROKEN是否被定义,Clang++(7.0.1)编译它没有错误,但是如果BROKEN被定义,g++(8.2.1)会引发错误:main.cpp:9:20:error:cannotconvert‘std::vect