问题标签 [libc++]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1453 浏览

c++ - libc++ 中 C++11 标准支持的状态?

是否有关于 libc++ 中 C++11 标准支持的良好信息来源?它的网站说支持 98% 的标准,但我想知道其他 2% 的功能是什么。

类似于 libstdc++ 的这个列表的东西会很好: http: //gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2011

0 投票
2 回答
2836 浏览

c++ - 检查 C++11 库功能

检查标准库的特定 C++11 功能是否存在的好方法是什么。

对于编译器功能,我只是顺便检查了(恕我直言)主要编译器(目前VC++gccclang,也许是Intel)的编译器版本虽然这不是最好和最灵活的方法,但我不知道任何更好的东西,除了具有非常好的宏的clang 。__has_feature

但对于与编译器没有那么严格耦合的库特性来说,情况就更糟了。目前,我想使用相同的方法检查VC++的编译器版本(假设它使用自己的库,这很容易)。对于clang,我至少可以__has_include用于大规模的基于标头的查询。除此之外,我想检查__GLIBCXX__'s value if defined 可能是一个好主意,但是我又找不到任何关于特定libstdc++版本引入了哪些功能的信息,除了当前版本支持的内容。

这些方法应该保留给预处理器检查等,因为我想在没有任何复杂配置过程并且不使用任何第三方库(是的,boost是第三方的)的仅头文件库中使用它。

  1. 那么在那些(非常狭窄的)条件下,我检查特定 C++11 库功能的可能性是什么。甚至可能在声明的特定函数或类型的规模上?

  2. 如果检查编译器或库版本仍然是最好的方法,我在哪里可以找到有关特定版本的libstdc++(可能还有其他重要的,可能是libc++ )支持的特定 C++11 功能的详细信息?

FWIW 目前我对<cstdint>C++11<cmath>函数和感兴趣std::hash,但这可能会改变,并且对于一般方法可能并不重要。

0 投票
2 回答
3118 浏览

c++ - 使用 libc++ 正则表达式库 (C++11) 匹配“行首”

我想匹配以给定单词开头的所有行,比如 iheap。如果我没记错的话,正则表达式(在 ECMAScript 语法中)"^iheap.*"应该可以解决问题。但是,当我使用 libc++ 的正则表达式库在 C++11 中对此进行测试时,只有第一行匹配。所以"^..."似乎只匹配输入的开头而不是行的开头。

这是一个例子:

输出:

这是 libc++ 的错误还是我做错了什么?谢谢!

注意:我使用的是 Mac OS X Mountain Lion 和 Apple LLVM Compiler 4.0(基本上是 clang 3.1 SVN 的快照)。

0 投票
1 回答
2859 浏览

c++ - C++ 错误:“内联”只能出现在函数上

我正在尝试使用 clang++ 在 OS X 10.7 下编译VCMI 。

我配置了项目,CXX=clang++因为 Apple 的 gcc 似乎无法识别所需的-std=c++0x标志。

我已经添加-stdlib=libc++了,CXXFLAGS因为没有那个 clang 甚至无法找到#include <array>.

目前我有:CXXFLAGS= -std=c++0x -stdlib=libc++ -Wall -Wextra -Wcast-align -Wpointer-arith -Wno-switch -Wno-sign-compare -Wno-unused-parameter -Wc++11-extensions

问题是我收到以下错误:

我必须承认我从未见过这样的事情。这些在 libc++ 源代码中!有人知道可能是什么原因吗?

0 投票
2 回答
5247 浏览

ubuntu - 在 ubuntu 12.04 上使用 libc++ 的 clang 3.1,找不到 iostream

我正在尝试使用 clang 编译一个 C++ 程序,我在这里使用打包版本安装了https://launchpad.net/~eudoxos/+archive/llvm-3.1。这是命令:

我得到了这个结果:

如您所见,它没有在正确的包含目录 /usr/include/c++/4.6 中搜索。但我认为问题远不止于此。即使我强制它在该目录中搜索,我也得到了这个:

并且该文件在该区域中不存在。我在想可能缺少 libc++,但是在我试图从源代码编译 libc++(我怀疑这会起作用)之前,因为我找不到任何专用的 libc++ ubuntu 包,所以我希望你们能帮忙。

非常感谢!

0 投票
1 回答
2021 浏览

c++ - 使用 Clang、libc++ 和 c++11 制作 SFML2 应用程序。对 SFML 库的未定义引用

我在制作 SFML2 应用程序时遇到了一个奇怪的问题。我正在使用存储库中的 Clang++ 以及 libc++(今天都更新了)。SFML2 也从 SVN 存储库更新。我正在使用最新版本的 Kubuntu。大约一个月前,当我上次尝试使用当时最新的存储库时,我也遇到了同样的问题。

我传递给 c++11 和 stdlib 编译器的参数是: -std=c++11 -stdlib=libc++

这是我所说的完整版本:

当我尝试编译应用程序时,我收到来自 Clang 的链接错误:

所有应用程序(当前)所做的就是创建一个 RenderWindow。这只是一个测试应用程序,但是对于我使用的大多数 SFML2 函数,都会有一些这样的链接问题。如果我不使用 libc++,程序编译得非常好。

据我所知,如果我包含 -stdlib=libc++,它不会在 SFML2 lib 文件夹中搜索 SFML2 库以正确链接。

当我使用 -v 命令调用 Clang 时,这里是 ld 调用:

如果我不使用 -stdlib=libc++ ...

所以,如果我让人们感到困惑:如果我将 libc++ 与 Clang 一起使用,我会从第一个 ld 调用中得到上述错误。如果我不使用它,第二个 ld 调用会非常顺利,并且应用程序会成功运行。

我使用 libc++ 的原因是因为我想使用 C++11 中的线程。没有它,我的计算机拥有的 GNU C++ 标准库会出现大量错误。我不会为此发布错误列表,因为它很大并且与此问题无关。

有没有人知道我如何能够解决 SFML2 问题?如果不需要,我宁愿不使用 pthreads 库。

0 投票
1 回答
847 浏览

c++ - C++11 std::bind 的链式调用不起作用

调用嵌套std::bind表达式时出现问题。下面的代码演示了这个问题。它无法使用 libc++ 编译,但可以使用 boost:

将绑定表达式包装在 a std::function(请参阅fix1参考资料)中可以解决问题,尽管会由于运行时多态性禁用内联而牺牲速度(尽管尚未测量)。

将绑定表达式包装在protect_t(参见参考资料fix2)中的灵感来自boost::protect,但是,由于绑定表达式不可复制,使用 libc++ 进行编译会失败。这让我想知道为什么std::function无论如何都要将它们包装在作品中。

知道如何解决这个问题吗?到底是怎么回事std::bind?首先,我认为问题与 C++11 标准规定的对绑定表达式的急切求值有关(请参见此处),但这不会是问题,不是吗?

0 投票
1 回答
373 浏览

xcode - Xcode 4.4 Lion 在 C++ 中使用 GCC 与 LLVM 的换行行为不一致

多年来,我一直在使用以下代码来使用 cin 和包括下一个换行符的字符。

我会在捕获异常并清除 cin 状态后调用它,如下所示:

cin 的下一次读取将剩余的换行符作为空格跳过。

我刚刚在 Lion 下更改为 Xcode 4.4.1。使用 LLVM GCC 4.2 GNU++98、libstdc++(GNU C++ 标准库),它像往常一样工作。

但是使用 Apple LLVM Compiler 4.0、c++11、libc++(支持 C++11 的 LLVM C++ 标准库),识别换行符似乎存在多个问题。与上面相同的代码需要第二次返回键来满足循环!替代方案也会出现同样的问题:

最后,在 while 循环中使用 getchar 而不是 cin.get() 就像往常一样工作!

这是 libc++ 中的错误吗?还是我错过了 Xcode 或 C++11 中的某些内容?

作为对 Howard Hinnant 的回应,这里有一个小测试用例,它显示了图片中没有任何异常等情况下发生的情况:

}

它读取并保存整数,直到它保存一个 3,然后它通过下一个换行符读取并丢弃,然后重复整个过程,因此您可以看到 3 之后的内容从输入流中丢弃。使用 Xcode 4.4.1 Lion 和 GNU++98 || GNU++11,libstd++,当我输入这两行时,我得到了我所期望的结果,每行都以空格结尾,然后是一个 RETURN 键击:

我进入Xcode的输出窗口:

但是对于 C++11,libc++,在我输入 SECOND RETURN 击键之前,第一行什么都没有发生,在两行输入之后,但仍然发生了正确的丢弃。因此,每行输入后下方的额外空间就是第二次击键的样子。

使用上面的 cin.ignore 调用而不是围绕 cin.get() 的 while 循环会发生完全相同的行为。所以问题是“为什么需要第二次 RETURN 键击?”

0 投票
1 回答
2366 浏览

c++ - 具有不完整值类型的映射

我收到以下错误:

错误是“字段的类型'Test'不完整”。我阅读了一些线程,建议这可能是 xcode 附带的 libcxx 版本中的一个错误,但如果我只需将其更改为:

我只是想仔细检查这绝对是一个正确的错误,而不是一个错误。

干杯!

0 投票
1 回答
3113 浏览

c++ - 在 Mac OS X 10.8 上编译和使用 boost 1.51.0

所以我花了过去 20 个小时试图让 boost 在 OS X 10.8 下工作,我终于让它编译没有错误,但是当我尝试编译一个使用 Boost.test 的测试用例时,我又回来了在一个受伤的世界。我应该提一下,我自己编译 boost 而不是使用可用的二进制文件的原因是因为我想使用 c++11 和 libc++。

当我编译 boost 时,我这样调用 b2:

它编译所有文件。然后我有这段代码

我尝试用它编译

它惨遭失败,给了我这个错误:

起初,我认为这是因为 boost 不是针对 64 位编译的,所以我尝试告诉 b2 专门这样做,但这没有任何区别,而且我还认为它在 OS X 上默认编译为 64 位。

关于它为什么失败以及我如何让它工作的任何想法?