C++17 std::variant header file (clang 6.0.0)

C++17 std::variant header file (clang 6.0.0)

本文关键字:clang file std variant header C++17      更新时间:2023-10-16

更新

我将问题缩小到(可能!即使阅读了我能找到的有关该主题的所有内容,也不完全清楚(安装stdlibc++-7-dev将为我提供合适的(即符合 C++17 标准(STL 标头和库。

这(显然也(与 Ubuntu 17.04 捆绑在一起(artful?(,但不适用于我正在使用的xenial(Ubuntu 16.04.3 LTS(。

我尝试下载单个.deb包并安装它们,但它很快就会变成未解决的依赖项的迷宫。

如果有人能指出如何在 16.04 上安装libstdc++-7-dev,我将不胜感激。

原始问题

我刚刚通过包管理器在 Ubuntu 6.0 中安装了 clang++ 16.04(按照这些说明(,一切似乎都很好:/usr/bin/clang++-6.0工作得很好,如果我尝试使用仅在 C++17 中工作的东西(non-type template arguments with auto,请参阅此处(一旦我设置CMAKE_CXX_COMPILER=/usr/bin/clang++-6.0它就会编译并运行——而当我不这样做时它会失败。

所以。。。clang 6.0理解广告中的C++17(doh!(,但是当我使用:

#include <variant>

在我期望的位置找不到该文件:

$ ll /usr/include/clang/6.0.0/
total 0
lrwxrwxrwx 1 root root 45 Aug  6 21:32 include -> ../../../lib/llvm-6.0/lib/clang/6.0.0/include

或我能想到的其他任何地方。

有谁知道(a(它是否应该在那里,(b(如果是这样,我去哪里找到它?

更新

我已经仔细检查了我是否有最新的(我认为(stdc++库:

$ sudo apt-get install libstdc++-5-dev
Reading package lists... Done
Building dependency tree       
Reading state information... Done
libstdc++-5-dev is already the newest version (5.4.0-6ubuntu1~16.04.4).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

同样适用于libstdc++-6-dev; 另外,我有libc++-dev

$ sudo apt-get install libc++-dev
Reading package lists... Done
Building dependency tree       
Reading state information... Done
libc++-dev is already the newest version (3.7.0-1).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

尽管如此,variant.h*文件还是无处可寻。 还有什么我应该尝试的吗?

是的,clang 5.0(或者更确切地说,将作为clang 5的一部分发布的libc ++(具有<variant>标头。但是你需要确保你已经安装了libc ++。

正如@KayEss提到的,您需要传递-std=c++17(或同一标志的早期版本-std=c++1z(,因为变体是仅限 C++17 的功能。