更新
我把问题缩小到(可能!它不完全清楚,甚至读完我能找到的关于这个话题的所有内容)安装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*
文件。
还有什么我应该尝试的吗?
答案 0 :(得分:3)
是的,clang 5.0(或者更确切地说,将作为clang 5的一部分提供的libc ++)具有<variant>
标头。但是你需要确保已经安装了libc ++。
正如@KayEss所提到的,您需要传递-std=c++17
(或同一标志-std=c++1z
的早期版本),因为variant是仅限C ++ 17的功能。< / p>