C ++ 17 std :: variant头文件(clang 6.0.0)

时间:2017-08-13 06:30:30

标签: c++ clang c++17 variant

更新

我把问题缩小到(可能!它不完全清楚,甚至读完我能找到的关于这个话题的所有内容)安装stdlibc++-7-dev会为我提供合适的(即C ++ 17) -compliant)STL标头和库。

这(显然)也捆绑了Ubuntu 17.04(artful?)但不适用于xenial(Ubuntu 16.04.3 LTS),这是我正在使用的。< / p>

我尝试下载各个.deb软件包并进行安装,但很快就会成为未解决的依赖项的迷宫。

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

原始问题

我刚刚通过软件包管理器(在these instructions之后)在Ubuntu 16.04中安装了clang ++ 6.0,一切看起来都很好:/usr/bin/clang++-6.0工作得很好,如果我尝试使用只适用于C的东西++ 17(non-type template arguments with auto,见here)一旦我设置了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*文件。 还有什么我应该尝试的吗?

1 个答案:

答案 0 :(得分:3)

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

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