【问题标题】:Checking for availability of C++0x algorithm additions检查 C++0x 算法添加的可用性
【发布时间】:2011-08-31 01:17:01
【问题描述】:

我正在尝试找出给定实现支持对算法头的哪些添加(gcc 和 MSVC 就足够了)。

最简单的方法是使用与核心功能相同的方法:检查编译器版本并在支持语言功能时定义宏。不幸的是,我找不到显示任一编译器版本号的列表。

只是检查通用 C++0x 宏(GXX_EXPERIMENTAL 或 __cplusplus)就足够了,还是我应该检查编译器的更改列表并基于这些列表构建我的宏?

http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.200x

【问题讨论】:

  • 对于 MSVC,宏 _MSC_VER_MSC_FULL_VER 记录在 here

标签: c++ macros c++11 conditional-compilation


【解决方案1】:

由于所有编译器供应商都提供了一个很好的列表,列出了哪些版本可用,并且无论如何您都会测试功能,所以我会使用编译器版本来检查特定功能。或者要求用户至少使用一个好的版本,而不用担心它。

__cplusplus 不一定是 C++0x 宏,它什么也没告诉你。 GXX_EXPERIMENTAL 从 GCC 4.3 开始就存在了,所以这也没什么用。

Here 您可以找到要检查特定编译器版本的宏。

【讨论】:

  • 请重新阅读该问题,因为它特别不是关于核心语言特性(在大多数情况下都很好地列出),而是关于库特性。库功能的 gcc 列表仅列出“实现的是/否”但没有版本。我什至找不到有关 MSVC 的任何信息。
  • @pmr:好的,我可能误读了这个问题。如果它不在列表中,您所能做的就是尝试并查看您计划支持的每个编译器。如果您真的不需要 Windows 支持,您可以随时使用libc++,这是一个完整 c++0x/11 标准库实现。它目前仅适用于 Mac 和 Linux(可能也适用于 BSD)。
【解决方案2】:

据我所知,唯一合适的解决方案是拥有一个构建脚本,该脚本尝试编译和运行一个使用该功能并具有运行时断言的文件。根据结果​​,在配置文件中有#define CONFIG_NO_FEATURENAME 或类似名称,并使用#ifndef 保护您的使用和解决方法。

这样可以检查是否

  1. 该功能可用
  2. 功能正常运行(取决于断言的正确性)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-24
    • 2010-10-08
    • 2023-03-09
    • 2011-10-13
    • 1970-01-01
    • 2010-11-01
    • 2010-12-27
    • 1970-01-01
    相关资源
    最近更新 更多