草庐IT

clang-instrumented

全部标签

C++:使用 clang 编译以迭代器作为值的映射时出现巨大错误

我正在尝试将迭代器用作std::map中的值,以便我可以通过对象的id高效地查找对象或通过其有效地迭代对象深度。考虑以下代码:#include#include#include#include#include#include#includestructobject{staticintnext_id;intid;intdepth;std::map::iteratorid_it;std::multimap::iterator>::iteratordepth_it;staticstd::mapby_id;staticstd::multimap::iterator>by_depth;object

c++ - 一个 "hack"来获取 float 模板参数工作编译但在 g++ 和 clang 上出现段错误

我知道whyIcan'tusefloatastemplateparameter以及如何设置模板类的staticconstfloat成员,这要归功于一对分子/分母。但我正在尝试另一个基于reinterpret_cast的“hack”,以从其IEEE754十六进制书写中“emule”float模板参数。这是一小段代码:#include#includetemplatestructMyStruct{staticconstfloatvalue;};templateconstfloatMyStruct::value=*reinterpret_cast(T);intmain(){typedefMyS

c++ - 代码可以用 clang 编译,但不能用 gcc 编译

我有这段代码可以用clang编译得很好(即使使用-Weverything),但是gcc会发出错误。#include#include#includeusingnamespacestd;classPhonebookWriter{public:PhonebookWriter(conststring&fname):fname_(fname),names_(),numbers_(){}PhonebookWriter&operator()(conststring&name,conststring&number){names_.push_back(name);numbers_.push_back(n

c++ - 在 QtCreator 的 [Clang]CodeModel 中启用 C++14

如何在ClangCodeModel(甚至“普通”模型)中启用C++14?我在.pro文件中添加了CONFIG+=c++14并且该项目在gcc和下都能正常编译clang但IDE在C++14构造上发出虚假警告让我恼火。当查看“C++代码模型检查器”时,“项目部件->常规”选项卡显示LanguageVersionCXX11尽管有配置条目。IDE的CodeModel似乎没有接受它。 最佳答案 转到工具->选项->C++->代码模型。找到“Clang代码模型警告”组并“复制”当前配置(默认情况下为“几乎所有内容的警告[内置]”)以进行编辑。在

c++ - GCC 和 Clang 是否优化逐字段结构复制?

例如给予typedefstructA{inta;intb;intc;}A;typedefstructB{intd;inte;intf;}B;voidf(B&b1,A&a2){b1.d=a2.a;b1.e=a2.b;b1.f=a2.c;}f可以替换为memcpy(特别是如果结构有更多字段)。两个版本会产生相同的代码吗?如果我们复制到的结构的字段少于A怎么办?即typedefstructC{intg;inth;}C;voidh(C&c1,A&a2){c1.g=a2.a;c1.h=a2.b;}我很感兴趣,因为我生成的代码包括这样的结构拷贝,通常会更改字段的顺序,我想知道是否应该对这些情况进行

c++ - 在 Windows 7 上使用带有代码块的 clang

我已经成功地使用VisualStudio210在Windows7上构建了clang,现在我喜欢将它与代码块IDE一起使用。因此,我将clang可执行文件复制到mingwbin\文件夹中,并更新了代码块的编译器设置以使用clang而不是gcc。但是当我编译helloworld示例时,出现以下错误:||===clang_test,Debug===|obj\Debug\main.o:c:\ProgramFiles(x86)\MicrosoftVisualStudio10.0\VC\include\system_error|447|undefinedreferenceto`std::iostr

c++ - if(null) 正在使用 clang++ 编译的特定计算机中执行

我有一个大型代码,我们在团队中使用了很长时间。但是它在我的机器上编译时出现了几个星期的问题。代码针对IntelAtomCPU交叉编译并在特定机器上运行。当它在我的计算机上编译时,与其他人不同,它会导致段错误。段错误来自不应执行的ifblock:Settings*s=&Global::getSettings();std::coutGlobal::getSettings()如下:...private:static__threadSettings*theSettings;public:staticSettings&getSettings(){return*theSettings;}...__

c++ - gcc 和 clang 中 constexpr 静态成员变量的链接器错误

我有一个片段:enumclassEC{a,b};structB{constexprB(ECec):ec_(ec){}ECec_;};structA_base{constexprA_base(Bb):b_(b){}Bb_;};structA:A_base{staticconstexprBbbb=EC::a;constexprA(Bbbbb):A_base(bbbb){}};intmain(){Aa1(A::bbb);//1Aa2{A::bbb};//2Aa3=A::bbb;//3Aa4={A::bbb};//4}它在支持c++17的现代编译器中编译良好。使用c++11和c++14标准支持

c++ - 使用 enable_if 选择特征 - 适用于 clang,但不适用于 gcc

我正在编写一段通用的(C++11)代码,它应该与boost::multi_array、Eigen::Matrix一起工作,并且可能其他类型的n维数组。在几个点上,我需要访问给定数组类型的元素类型。boost数组包含一个名为Element的typedef,而Eigen数组包含一个名为Scalar的typedef。我想要的是一个返回给定数组类型的元素类型的类型特征。不幸的是,我不能只为所有可能的数组类型模板专门化特征类,因为Eigen使用表达式模板,因此,有无限多种类型的Eigen矩阵。因此,我将SFINAE与enable_if一起使用来实现我的特征。enable_if应该选择的标准是,一

c++ - 为什么 VC++ 编译代码而 clang 不编译?

我使用VS2015(Update3)编译以下代码:#include#include#includeintmain(){std::functionfn=std::isspace;}如果我用VC++编译就可以了。但是,如果我在VisualStudio中将编译器更改为VisualStudio2015-ClangwithMicrosoftCodeGen(v140_clang_c2),clang会报告错误:main.cpp(7,26):error:noviableconversionfrom''to'std::function'std::functionfn=std::isspace;更奇怪的是