草庐IT

clang-extensions

全部标签

c++ - 缩小从 `int`(常量表达式)到 `unsigned int` 的转换 - MSVC vs gcc vs clang

constexprinti=100;structF{F(unsignedint){}};intmain(){F{i};}上面的代码片段:使用-Wall-Wextra-Wpedantic在g++7上编译没有警告。使用-Wall-Wextra-Wpedantic在clang++4上编译没有警告。无法在MSVC2017上编译:conversionfrom'constint'to'unsignedint'requiresanarrowingconversion问:这里MSVC是不是错了?liveexampleongodbolt.orginti=100;structF{F(unsignedint

c++ - 如何告诉 clang 将调试符号放入可执行二进制文件中?

这个问题在这里已经有了答案:Whydoesa2-stagecommand-linebuildwithclangnotgenerateadSYMdirectory?(1个回答)关闭5年前。我的编译命令在macOSSierra中是clang-std=c11-g-Wall-Werror-fsanitize=address-file.c-ofile编译后,它还会生成一个额外的file.dSYM文件,其中包含所有调试符号。但是,当我使用WSL或其他*nix系统时,它不会生成这样的文件,调试符号被嵌入到可执行二进制文件中。所以我只是想知道有没有办法在macOS中使用clang做同样的事情。

c++ - g++ 和 clang++ 与在模板类中定义的友元模板函数的不同行为

另一个类型的问题“g++和clang++之间谁是正确的?”适用于C++标准专家。下面的代码templatestructfoo{templatefriendvoidbar(){}};intmain(){foof0;foof1;}使用clang++编译没有问题(只有两个“未使用的变量”警告)但给出以下错误tmp_002-11,14,gcc,clang.cpp:Ininstantiationof‘structfoo’:tmp_002-11,14,gcc,clang.cpp:27:12:requiredfromheretmp_002-11,14,gcc,clang.cpp:20:16:erro

c++ - Clang 修改析构函数中的返回值?

在尝试编写一个类来计时调用它的构造函数和析构函数之间的持续时间时,我遇到了我认为是clang中的错误。(编辑:这不是错误;它是实现定义的复制省略)下面的timer结构保留指向作为引用传入的持续时间对象的指针,并将范围的持续时间添加到此。#include#includestructtimer{usingclock=std::chrono::high_resolution_clock;usingtime_point=clock::time_point;usingduration=clock::duration;duration*d_;time_pointstart_;timer(durat

c++ - CMake 和 Clang 工具链接错误(树外)

我正在尝试编译RecursiveASTVisitorexampleofClang使用CMake文件。构建项目进行得很顺利,但是,由于对LLVM和Clang库的多个undefinedreference,链接C++可执行文件失败。我正在LLVM/Clang源文件树之外构建示例。这是我的CMakeLists.txt(我正在使用FindClang.cmakeandFindLLVM.cmakefromthisproject):cmake_minimum_required(VERSION2.8.4)project(ifcount)set(CMAKE_MODULE_PATH${CMAKE_CURRE

c++ - VS2015 和 clang 编译此代码,但 g++ 拒绝它。哪一个是正确的?

VS2015和clang编译这段代码,但是g++rejectsit.namespaceA{structB{friendvoidf();};}voidA::f(){}intmain(){}我认为g++是正确的,因为7.3.1.2/3中的注释:Ifafrienddeclarationinanon-localclassfirstdeclaresaclass,function,classtemplateorfunctiontemplate97thefriendisamemberoftheinnermostenclosingnamespace.Thefrienddeclarationdoesno

c++ - 使用 c++1z 在 <functional> 上出现 clang 4 构建错误

我刚刚将我的archlinux系统更新到最新版本,其中包括gcc7.1.1。尝试构建这个:#includeintmain(intargc,char**argv){return1;}使用命令clang++main.cpp-std=c++1z导致错误:Infileincludedfrommain.cpp:1:Infileincludedfrom/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.1.1/../../../../include/c++/7.1.1/functional:60:Infileincludedfrom/usr/bin/../lib

c++ - `constexpr` 变量 "used in its own initializer": Clang vs. GCC

这个问题似乎与anexistingone有关,但我不明白theanswerthere中提供的“可移植解决方法”(涉及constautothis_=this;)而且我认为下面的例子更容易理解。我正在使用以下C++17代码片段(livedemo):#includestructTest{constchar*name_{nullptr};constTest*src_{nullptr};constexprTest(constchar*name)noexcept:name_{name}{}constexprTest(constTest&src)noexcept:src_{&src}{name_=s

c++ - 执行限定名称查找时 Clang 和 GCC 之间的不同行为

考虑以下程序:#includenamespaceN{intj=1;}namespaceM{typedefintN;voidf(){std::cout用clang编译它会出现以下编译器错误:prog.cc:10:22:error:'N'(aka'int')isnotaclass,namespace,orenumerationstd::coutGCC不会给出任何编译器错误。我想弄清楚我应该为哪个编译器提交错误报告。哪个编译器具有正确的行为以及原因(对c++标准的引用)?Wandbox-Clang:http://melpon.org/wandbox/permlink/s0hKOxCFPgq5

c++ - clang 的 `-Ofast` 选项在实际中有什么作用,特别是对于与 gcc 的任何差异?

类似于的SO问题Whatdoesgcc'sffast-mathactuallydo?并且与Clangoptimizationlevels的SO问题相关,我想知道什么clang的-Ofast优化在实际方面的作用,这些是否与gcc完全不同,或者这是否比编译器更依赖于硬件。根据clang优化级别的公认答案,-Ofast添加到-O3优化:-fno-signed-zeros-freciprocal-math-ffp-contract=fast-menable-unsafe-fp-math-menable-no-nans-menable-no-infs.这似乎完全与float学相关。但是这些优化对