Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在clang中重新启用C++17删除的功能?

如何在clang中重新启用C++17删除的功能?
EN

Stack Overflow用户
提问于 2021-09-09 01:52:10
回答 1查看 347关注 0票数 0

我有一些3rdparty库,它们是作为一个大型项目的一部分构建的。一些库需要C++17,其他库需要在C++17中删除的功能(std::auto_ptrstd::fun_ptr)。

对于这个项目,使用Clang (版本11)。根据搜索,如果我使用clang definition _LIBCPP_ENABLE_CXX17_REMOVED_FEATURES,那么所需版本的不匹配应该不是问题。

然而,这没有任何影响。我在一个很小的测试样本中尝试了这个定义:

代码语言:javascript
运行
AI代码解释
复制
#include <memory>

int main(void)
{
    std::auto_ptr<int> thing(new int(1));
    return 0;
}

在不指定C++ std的情况下,它可以很好地编译。

但是,如果我指定C++17,它将因-D_LIBCPP_ENABLE_CXX17_REMOVED_FEATURES而失败

代码语言:javascript
运行
AI代码解释
复制
PS E:\> clang++ -std=c++17 -D_LIBCPP_ENABLE_CXX17_REMOVED_FEATURES .\autoptr.cpp
.\autoptr.cpp:5:10: error: no member named 'auto_ptr' in namespace 'std'
    std::auto_ptr<int> thing(new int(1));
    ~~~~~^
.\autoptr.cpp:5:22: error: expected '(' for function-style cast or type construction
    std::auto_ptr<int> thing(new int(1));
                  ~~~^
.\autoptr.cpp:5:24: error: use of undeclared identifier 'thing'
    std::auto_ptr<int> thing(new int(1));
                       ^
3 errors generated.

c++17删除的功能是否在Clang中不再可用,或者我是否需要额外的编译器选项?

Clang版本:

代码语言:javascript
运行
AI代码解释
复制
PS E:\> clang++ -v
clang version 11.1.0
Target: x86_64-pc-windows-msvc
Thread model: posix
InstalledDir: C:\Program Files\LLVM\bin

编辑:有趣的是,这在我的另一个系统上编译得很好。不需要额外的定义。

代码语言:javascript
运行
AI代码解释
复制
#@#:~/kraken$ clang++ -v
clang version 10.0.0-4ubuntu1~18.04.2
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin

edit2:从11.1.0升级到12.0.1。没有变化

代码语言:javascript
运行
AI代码解释
复制
$ clang++ -v -stdlib=libc++ -std=c++17 -D_LIBCPP_ENABLE_CXX17_REMOVED_FEATURES -D_LIBCPP_ENABLE_CXX17_REMOVED_AUTO_PTR autoptr.cpp
clang version 12.0.1
Target: x86_64-pc-windows-msvc
Thread model: posix
InstalledDir: C:\Program Files\LLVM\bin
clang++: warning: argument unused during compilation: '-stdlib=libc++' [-Wunused-command-line-argument]
 "C:\\Program Files\\LLVM\\bin\\clang++.exe" -cc1 -triple x86_64-pc-windows-msvc19.29.30038 -emit-obj -mrelax-all -mincremental-linker-compatible --mrelax-relocations -disable-free -disable-llvm-verifier -discard-value-names -main-file-name autoptr.cpp -mrelocation-model pic -pic-level 2 -mframe-pointer=none -fmath-errno -fno-rounding-math -mconstructor-aliases -munwind-tables -target-cpu x86-64 -tune-cpu generic -v -resource-dir "C:\\Program Files\\LLVM\\lib\\clang\\12.0.1" -D _LIBCPP_ENABLE_CXX17_REMOVED_FEATURES -D _LIBCPP_ENABLE_CXX17_REMOVED_AUTO_PTR -internal-isystem "C:\\Program Files\\LLVM\\lib\\clang\\12.0.1\\include" -internal-isystem "C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Professional\\VC\\Tools\\MSVC\\14.29.30037\\include" -internal-isystem "C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Professional\\VC\\Tools\\MSVC\\14.29.30037\\atlmfc\\include" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\Include\\10.0.19041.0\\ucrt" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.19041.0\\shared" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.19041.0\\um" -internal-isystem "C:\\Program Files (x86)\\Windows Kits\\10\\include\\10.0.19041.0\\winrt" -std=c++17 -fdeprecated-macro -fdebug-compilation-dir "E:\\" -ferror-limit 19 -fno-use-cxa-atexit -fms-extensions -fms-compatibility -fms-compatibility-version=19.29.30038 -fdelayed-template-parsing -fcxx-exceptions -fexceptions -faddrsig -o "C:\\Users\\JONATH~1.NOB\\AppData\\Local\\Temp\\autoptr-152d67.o" -x c++ autoptr.cpp
clang -cc1 version 12.0.1 based upon LLVM 12.0.1 default target x86_64-pc-windows-msvc
#include "..." search starts here:
#include <...> search starts here:
 C:\Program Files\LLVM\lib\clang\12.0.1\include
 C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30037\include
 C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30037\atlmfc\include
 C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\ucrt
 C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\shared
 C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\um
 C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\winrt
End of search list.
autoptr.cpp:5:10: error: no member named 'auto_ptr' in namespace 'std'
    std::auto_ptr<int> thing(new int(1));
    ~~~~~^
autoptr.cpp:5:22: error: expected '(' for function-style cast or type construction
    std::auto_ptr<int> thing(new int(1));
                  ~~~^
autoptr.cpp:5:24: error: use of undeclared identifier 'thing'
    std::auto_ptr<int> thing(new int(1));
                       ^
3 errors generated.

此输出显示了问题。没有使用LLVMs libcxx。使用-D_HAS_AUTO_PTR_ETC=1为我解决了这个问题。

EN

回答 1

Stack Overflow用户

发布于 2021-09-09 03:47:59

检查哪个c++ stdlib正在与clang的-v标志一起使用。我以为使用了llvm的libcxx,因为-stdlib=libcxx被忽略了。事实上,msvc的stdlib正在被使用。使用msvc:

代码语言:javascript
运行
AI代码解释
复制
clang++ -std=c++17 -D_HAS_AUTO_PTR_ETC=1 file.cpp
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69116001

复制
相关文章
Canvas绘制平行线以及解决直线模糊问题
其实在绘制直线的时候,默认是绘制1px的宽度,但是绘制直线的中轴线位置是在坐标轴刻度的上,如下:
Devops海洋的渔夫
2019/10/13
1.6K0
java 计算坐标点距离,平行线交点算法详解
由于程序中的坐标原点,都是左上角开始的。所以很少涉及象限的问题。以下的一些算法,不会强调象限问题。
zinyan.com
2023/07/14
8370
java 计算坐标点距离,平行线交点算法详解
6种不同画法画平行线_9.2 平行线和它的画法(练习)-2019-2020学年七年级数学下册同步精品课堂(青岛版)…[通俗易懂]
【详解】解:①任意两条直线的位置关系不是相交就是平行,说法错误,应为根据同一平面内,任意两条直线的位置关系不是相交就是平行;
全栈程序员站长
2022/11/05
2790
三条平行线与等边三角形
画法有好多种,搜集网上的一些画法,先介绍4种,再讨论一下三角形连长与平等线距离的关系,最后讨论下第二种画法的变化(三角形边长的唯一性未证明)。
全栈程序员站长
2022/11/05
1.5K0
三条平行线与等边三角形
剔除两侧极值求平均
祝新的一年,各位表亲财源广进! 不知道过年期间是否安好哇! 请各位表亲好好断句,不要说错话! 像小编这种英俊潇洒风流倜傥的,身边难免有很多选择。 我可以允许你吐一会,但是不可以打我!!! 上表呢就
用户1332619
2018/03/08
2.4K0
剔除两侧极值求平均
原始JDBC 操作
特殊说明: 解决问题的光鲜,藏着磕Bug的痛苦。 万物皆入轮回,谁也躲不掉! 以上文章,均是我实际操作,写出来的笔记资料,不会出现全文盗用别人文章!烦请各位,请勿直接盗用!
收心
2022/01/19
4870
Netflix的原始相机文件
原始相机文件不仅对一般的电影制作人很重要,其对于 Netflix 的全球分布式协作环境也很重要。这些文件包含相机传感器捕获的数据。它们代表负片的数字等价物,后期制作流程都离不开它们。使用 OCF 有一些独特的复杂性,而典型的 Netflix YCbCr 流不存在这些复杂性,它们之间的根本区别在于,专业生产相机捕获的数据通常包含原始的、未处理的传感器数据,必须先进行色彩管理,然后才能在标准计算机显示器上查看。
用户1324186
2022/03/15
1.1K0
Netflix的原始相机文件
万物皆数 数学的本质在于它的自由 --- 康托尔
上一篇讨论的非阿基米德几何,其本质上已经与欧几里得几何没有太大差别,平面几何的大部分结论也都可以得证。本篇我们试图再度简化公理系统,并以此研究特定公理对平面几何性质的影响。试想,如果我们只讨论平面上的点线关系,公理I1∼2,II,IVI1∼2,II,IV似乎已经足够,因为I3∼6I3∼6是关于空间几何的、IIIIII则是关于线段和角的度量的。下面就来看看,这两组看似无关的公理,是如何影响到两个点线定理的。
落寞的鱼丶
2022/02/07
7470
原始 socket 编程
1.原始 socket 可以和内核一样直接对所有层进行操作(除了物理层)。可以更改 mac 更改 ip 更改端口。so dos 攻击就可以通过原始 socket 编程来伪造 ip 进行。 2.也可以访问经过网卡的所有数据.普通的 socket 只能访问发送给自己端口的数据。
战神伽罗
2019/07/24
2K0
原始 socket 编程
如何输出图片的原始比率
一些网站特别是以内容呈现为主的,经常会有图片的显示。一方面图片要懒加载,另一方面要设置图片占位以避免页面抖动。 懒加载的这篇文章先不说,先说下图片占位中,保持图片原始宽高百分比的问题。
用户2845596
2021/01/21
1.1K0
数据分析入门系列教程-SVM原理
SVM 的英文全称是 Support Vector Machines,我们叫它支持向量机,支持向量机是用于分类的一种算法,当然也有人用它来做回归。
周萝卜
2020/11/10
4580
数据分析入门系列教程-SVM原理
图像仿射
算法:图像仿射是图像通过一系列几何变换实现平移、旋转等多种操作。仿射变换保持图像平直性和平行性。平直性是图像经过仿射变换后,直线仍然是直线。平行性是图像经过仿射变换后,平行线仍然是平行线。
裴来凡
2022/05/28
5110
图像仿射
我分析了国际一线化妆品原始数据,发现了美妆产品的营销套路
作为一个爱美的女生,数据侠 Gurminder Kaur 几乎每天都需要美妆产品为自己“保驾护航”。不过,与其总是作为一个消费者,她决定不如从数据的视角切入,分析一下这些美丽产品背后的秘密。她从化妆品官网上爬取了大量信息,用数据科学的方式为美妆进行了一次全景式观察。
DT数据侠
2018/09/21
1.8K0
我分析了国际一线化妆品原始数据,发现了美妆产品的营销套路
对原始生殖细胞的认知
在雄性中,原始生殖细胞(PGCs),即配子前体,分化为精原细胞前,与支持细胞形成索状结构并进入有丝分裂停止。在雌性中,PGCs分化为卵母细胞,进入有丝分裂到减数分裂的异步过渡。在发育后期,颗粒细胞围绕初级卵母细胞形成原始卵泡,保持静止直到发育期。
用户10391424
2023/03/02
5470
对原始生殖细胞的认知
JS对象到原始值的转换
JS对象到原始值转换的复杂性 主要由于某些对象类型存在不止一种原始值的表示 对象到原始值转换的三种基本算法 在解释三种算法前需要了解toString valueOf这两个方法 toString 返回对象的字符串表示 Array类的toString方法会将每个元素转换为字符串,再使用逗号作为分隔符拼接起来 Function类的toString方法将定义的函数转换为JS源代码的字符串 Date类型的toString方法返回一个人类友好(且JS可解析)的日期和时间字符串 RegExp类定义的toStrin
peng_tianyu
2023/02/13
4.4K0
原始语料库
第一步: 判断数据中是否存在重复数据 创建python文件– 代码框架 ''' author: kzb time: 2018-12-10 ''' import pandas as pd import os,csv dataPath = os.path.join("音译原始数据.csv") def import_data(dataPath): ''' 导入文件中的数据 return:dataFrame ''' pass def find_En_Cn_excess(dataFrame
K同学啊
2019/01/22
8460
ThreadPoolExecutor获取原始异常
ThreadPoolTaskExecutor是Spring框架提供的一个线程池实现,它是基于Java的ThreadPoolExecutor实现的。ThreadPoolTaskExecutor可以管理线程池中的线程,以满足多线程并发执行任务的需要。
关忆北.
2023/10/11
2410
ThreadPoolExecutor获取原始异常
原始UDP封包发送
发送原始UDP封包时: 1 以IPPROTO_UDP 为协议类型创建一个原始套接字,打开原始套接字上的IP_HDRINCL选项 2 构建UDP封包,要先设置IP头,设置UDP头,最后UDP净荷数据。 3 初始化完整的UDP封包之后,调用sendto函数即可将他发送。 计算UDP封包校验和的过程如下: void ComputeUdpPseudoHeaderChecksum( IPHeader *pIphdr, UDPHeader *pUdphdr, char *payloa
用户1154259
2018/01/17
1.9K0
蒲丰投针问题
18世纪法国科学家Buffon提出的一种计算圆周率π的方法——随机投针法,就是用一枚普普通通的针就可以计算出圆周率 ,是不是很神奇,现在带着你的疑惑和我一探究竟吧。
用户3577892
2020/06/10
1.1K0
AI读书原始版2023.5.9
用户7138673
2023/08/16
1620
AI读书原始版2023.5.9

相似问题

将原始平行线传递到角

21

平行线?

628

舞台平行线

12

平行线旋转

13

无尖点的线偏移(平行线)

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档