草庐IT

c++ - GCC 和 Clang 都不会通过编译时已知的函数指针数组进行内联调用——为什么?

CompilerExplorer上的示例代码:https://godbolt.org/g/fPfw4k我曾尝试使用函数指针数组作为跳转表而不是开关,因为我发现它更简洁。然而,令我惊讶的是,GCC和Clang编译器似乎都无法内联它。是否有具体原因?包含死链接的示例代码:namespace{templateintbar(){returnN;}intfoo1(intn){if(n5){__builtin_unreachable();}#if__clang____builtin_assume(n>=0&&n,bar,bar,bar,bar,bar};returnfns[n]();}intfoo

c++ - Clang 无法在 macOS 中编译基本头文件(如 <iostream>)

我的macOS版本是10.14Xcode版本是10.2为clang编写插件。我只是使用以下命令从Github安装llvm和clang。gitclonehttps://github.com/llvm/llvm-project.gitcdllvm-projectmkdirbuildcdbuildcmake-G"UnixMakefiles"-DLLVM_ENABLE_PROJECTS="clang;libcxx;libcxxabi"../llvm然后用clang--version,它显示:clangversion10.0.0(https://github.com/llvm/llvm-proj

c++ - 这个不可复制的 map 是否合法 c++11? GCC 4.7 和 MSVS 2010 允许它。 Clang 3.1 没有

我创建了一个不可复制的map,我无法使用clang对其进行编译。由于clang非常符合标准,我想知道我的代码是否合法。MSVS2010和GCC4.7编译此代码时没有警告或错误。附上完整代码:有问题的行是main的最后一行。=delete需要删除MSVS2010#include#include#includetemplate>classnon_copyable_map:publicstd::map{typedefstd::mapBaseType;public:non_copyable_map(){}non_copyable_map(non_copyable_map&&t):BaseTyp

使用 clang/llvm 的 C++ 精确垃圾收集器?

好的,所以我想用C++编写一个精确的“标记和清除”垃圾收集器。我希望做出一些可以帮助我的决定,因为我的所有指针都将包装在“RelocObject”中,并且我将有一个内存块用于堆。这看起来像这样://Thisclassactsasanindirectiontotheactualobjectinmemorysothatitcanbe//relocatedinthesweepphaseofgarbagecollectorclassMemBlock{public:void*Get(void){returnm_ptr;}private:MemBlock(void):m_ptr(NULL){}vo

c++ - Clang++ 不理解 mac 终端中的 c++11

我正在尝试获取一些c++代码(使用c++11)在mac终端中编译。我试过了clang++-std=c++11main.cpp但是我得到了错误error:invalidvalue'c++11'in'-std=c++11'我的xcode完全是最新的,我假设我在终端做错了什么?代码在xcode本身运行良好,我只是无法让它在终端中运行。任何提示都会很棒! 最佳答案 正如Andy已经说过的,您的编译器只接受-std=c++0x。它可能很旧。[仅回答以将问题从未回答的问题队列中删除] 关于c++-C

c++ - GCC 声明友元函数重载,调用不明确,clang 编译

templateclassrp{};templateclassP>structb{templateclassFriendP>friendvoidf(bfrom);};templateclassP>voidf(bfrom){}intmain(){bv;f(v);return0;}Clang3.3(svn)编译良好,而GCC4.8拒绝它:main.cpp:Infunction'intmain()':main.cpp:17:10:error:callofoverloaded'f(b&)'isambiguousf(v);^main.cpp:17:10:note:candidatesare:ma

c++ - Gcc 失败并显示 "call of overload is ambignuous"而 clang 没有

我有以下代码:#includestructb_symbol{templateexplicitb_symbol(T&&symbol):symbol(std::forward(symbol)){}std::experimental::string_viewsymbol;};structb_utf8{templateexplicitb_utf8(T&&value):value(std::forward(value)){}std::experimental::string_viewvalue;};structvalue{explicitvalue(b_utf8){}explicitvalue(

c++ - 与 static_assert 和 boost::hana 相关的 Clang 编译错误

考虑以下使用-std=c++14在Clang3.8上成功编译的问题。#includenamespacehana=boost::hana;intmain(){constexprautoindices=hana::range();hana::for_each(indices,[&](autoi){hana::for_each(indices,[&](autoj){constexprbooltest=(i==(j==i?j:i));static_assert(test,"error");});});}这个测试非常荒谬,但这不是重点。现在考虑一个替代版本,其中测试直接放在static_asse

c++ - CMake、VTK8 和 Embarcaderos Clang 编译器

C++Builder(10.2.3)的当前Embarcadero版本附带Clang32和64位C/C++编译器。Clang版本号称是3.3,(http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Win32_Clang-enhanced_Compilers)。我正在研究使用这些编译器和CMake编译VTK8.0和其他库。但是,CMake附带的“系统”CMake文件(Windows-Embarcadero.cmake)并未针对Clang配置,而是针对较旧的bcc32编译器配置。Embarcadero建议将其分发的“Windows-Embarc

c++ - 关于静态全局 lambda 变量的错误 clang-tidy 警告?

提供以下代码,在全局范围内,clang-tidy不给出警告:autotest=[]{};但是,当执行以下操作时,它会:#includeautotest=[]{std::tuplet{1,2,3};};:3:6:warning:initializationof'test'withstaticstoragedurationmaythrowanexceptionthatcannotbecaught[cert-err58-cpp]autotest=[]{^/opt/compiler-explorer/gcc-8.2.0/lib/gcc/x86_64-linux-gnu/8.2.0/../../