草庐IT

clang_complete

全部标签

c++ - clang compaining about __attribute__((packed)) 即使结构需要打包

我有一个结构,需要打包(不打包大小为20个字节,但我需要16个才能读/写它)。当我添加packed属性时,我得到了结构的所有成员的error:packedattributeisunnecessaryfor警告。当使用pragma消除错误时,代码可以正常编译并且结构的大小为16,但是如果我删除pragma,它就会失败(因为我使用的是-Werror)。clang只是错误地发出了这个警告还是我做错了什么?#includetypedefstruct__attribute__((packed)){uint16_twFormatTag;uint16_tnChannels;uint32_tnSamp

c++ - Clang:从命令行或 Python 可靠地检测支持的 C++ 标准

在Python脚本中,我试图确定安装的Clang支持的最高C++标准。一个问题是我不能依赖clang--version的输出总是相同的——最好的例子是OSX上的AppleClang。尝试使用-std=c++11、-std=c++14等测试标志编译helloworld.cpp文件,...似乎不是最可靠的方法,需要创建临时文件。是否可以运行任何命令来测试某种方言是否可用而无需实际编译任何东西? 最佳答案 Isthereanycommandonecouldruntotestifacertaindialectisavailablewitho

c++ - 继承的构造函数,在 clang++3.9 中编译,在 g++7 中失败

这段代码structBase{};structDerived:Base{usingBase::Base;};intmain(){Baseb;Derivedd{b};}compilesfineonclang++3.9,然而它failsonallgcc's(包括7)和小于3.9版本的clangs错误信息error:nomatchingfunctionforcallto'Derived::Derived()Derivedd{b}'.上面的代码是否合规?PS:如果我注释掉usingBase::Base行,代码将不再在clang-3.9上编译。 最佳答案

c++ - 通用 lambda、重载、std::is_invocable 和 SFINAE - GCC 和 Clang 之间的不同行为

问题我写了一段可以编译的复杂模板代码withGCC8.2.1,但不是withClang7.0(代码和错误链接)。我认为这可能是thisQ&A的暗示,但我看不到它。动机我正在编写一个类,我希望它可以用两个不同类型的可调用对象构造,但也可以省略其中一个,即:my_class(callable_1);my_class(callable_2);my_class(callable_1,callable_2);那应该没有问题。但是,为什么不允许callable_1和callable_2成为函数模板(或带有operator()模板的仿函数)。也就是说,我想要这个(或者至少最初想要):my_class

c++ - 我可以将用 clang c++11 编译的对象与另一个用 c++17 编译的对象链接起来吗

我正在专门寻找thisquestion的clang答案.如果我用-std=c++11编译一个对象,用-std=c++17编译另一个对象,它们可以安全链接吗? 最佳答案 答案贴hereJonathanWakely的著作对于Clang也是正确的。简单的回答:如果您自己编译这两个对象,您选择的-std选项不会影响最终结果。大多数给定的C++ABI由标准库决定。其余的是各种运行时支持,例如异常、编译器内置(实际上可能分派(dispatch)到标准库)等等。libstdc++ABI兼容性是Clang的一个明确目标,所以你在这里没问题。如果您使

c++ - GCC 和 clang 中奇怪的构造和析构函数语法(void * 返回类型)

在编写一些C++代码(使用clang、x86_64linux进行编译)时,我不小心编写了以下结构:classClass{*Class(){}};即在构造函数名称前加上星号(*)。再尝试一下,我注意到您可以在前面放置任意数量的*;它也适用于析构函数,即classClass{********Class(){}********~Class(){}};Clang编译它没有任何错误或警告。但是GCC给出了警告controlreachesendofnon-voidfunction这让我相信我实际上是在声明一个返回类型为void*(或void********)的构造函数/析构函数。写任何类型的带有值

C++ clang UBsan 抑制标志名称

使用clang的ubsan运行来自boost版本1.64的gzip.hpp代码会给出以下消息:path/to/boost/1_64_0/include/boost/iostreams/filter/gzip.hpp:674:16:runtimeerror:implicitconversionfromtype'int'ofvalue139(32-bit,signed)totype'char'changedthevalueto-117(8-bit,signed)#00x7fed40b77bc2inboost::iostreams::basic_gzip_compressor>::basic

c++ - llvm/clang 自身重新编译

在阅读了这里的许多问题后,我决定试试clang,并在Ubuntu12.04(64位)上安装了svn版本。我原以为会出现问题,但编译顺利,没有任何警告。我注意到当重新运行配置脚本时,如果clang/clang++在你的路径中,它会选择这个而不是gcc/g++来进行自己的编译。用自己重新编译llvm/clang是个好主意吗?我知道这绝对是gcc的标准,但我读到clang的C++实现还不够好(也许这是过时的信息...)。 最佳答案 Clang已经self托管了几年。失去这种能力将是一种严重的倒退。Clang目前对C++的支持相当不错。甚至

c++ - Clang 错误,没有可行的转换

我正面临clang3.1的问题。GCC4.2不会出现此特定问题。以下是发生错误的示例:#include#include#include#includetypedefunsignedshortchar16_t;typedefchar16_tTCHAR;typedefstd::basic_string,std::allocator>wstringT;templateinlinewstringTMyTestFunction(constT&source){std::wstringstreamout;out错误信息指出:Noviableconversionfrom'__string_type'(

C++11,枚举类,g++ 的 undefined reference ,与 clang++ 一起工作

我使用了新的C++11“枚举类”类型,并在使用g++时观察到“undefinedreference”问题。这个问题不会发生在clang++中。我不知道是我做错了什么还是g++错误。重现问题的代码是:(4个文件:enum.hpp、enum.cpp、main.cpp和Makefile)//file:enum.hppenumclassMyEnum{val_1,val_2};templatestructFoo{staticconstMyEnumvalue=MyEnum::val_1;};templatestructFoo{staticconstMyEnumvalue=MyEnum::val_2