如何使用C++测试功能支持
How do I test for feature support with C++?
我正在尝试使用带有g++6.3.1和-std=c++17标志的::std::optional<T>
。事实证明,我必须实际使用#include <experimental/optional>
,而使用::std::experimental::optional<T>
。我该如何测试这一点,以便在功能真正包含在标准库中后可以包含正确的标题?
有没有一个选项我可以给g++,让它包括"实验"功能,就像它们是标准的一样?
您可以使用特性测试建议中的__cpp_lib_experimental_optional
。
简而言之,这里的故事是,gcc有一个习惯,就是成为各种位的"早期采用者",这些位被提议包含在即将到来的C++标准修订版中,但在这些位被正式采用之前。
当然,不能保证gcc中这些位的实现最终会在没有任何后续调整的情况下出现在最终的C++标准中。因此,它们被释放为<experimental/optional>
,而不是<optional>
。
您可以预期,在gcc
的未来版本中,这个头文件将被重命名为<optional>
,可能需要进行任何最终调整,使其与C++标准中的最终规范相匹配。
可以直接将自己的头文件和翻译单元写入#include <experimental/optional>
而不是#include <optional>
。没有编译器开关可以为您执行此操作。当您将编译器升级到实现最终C++标准规范的新版本,并具有实际的<optional>
头文件时,您可以简单地相应地更新源代码。
您还可以在源树中放置一个名为optional
的存根文件,其中只包含一个:
#include <experimental/optional>
然后添加一个-I .
编译选项,以便#include <...>
也能在当前目录中查找;然后参考来源中的#include <optional>
。
-I .
将找到这个存根,它将拉入experimental/optional
。稍后更新gcc
时,只需删除此文件和-I .
选项即可。
更多信息
- 错误:(-210:不支持的格式或格式组合)功能'create'中的硬件视频解码器不支持视频源
- Vulkan 的传输队列系列功能和显卡支持:条件检查是否准确?
- "configure"脚本如何检测我的系统是否支持某些头文件或 cpp 功能?
- HDF5 构建了并行支持,但找不到特定于 mpi 的功能
- 具有功能支持的调车场算法
- OpenCV 错误的解决方案:不支持的格式或格式组合 - 当将 ORB 功能与 FlannBasedMatcher 匹配
- 定义支持/不支持功能的HAS_XXX/NO_XXX
- 为什么C 模板功能不支持返回指针
- C++不支持非成员虚拟功能的原因是什么?
- 有没有办法在我的通用功能路由器设计中支持"常量引用"作为功能签名参数?
- Cpp:Cpp中的JSON解析器,提供支持序列化/反序列化功能,将JSON对象转换为用户定义的类
- 如何使用C++测试功能支持
- 如何获得GCC版本支持特定功能
- 为了支持移动语义,应通过unique_ptr,值或rvalue获取功能参数
- 如何在ZLIB支持下建立增强功能
- 要使 gcc 4.8.1 支持 c++11 中的新"auto"功能?
- 我如何知道我的编译器是否支持XXXXC++11功能
- YCM是否支持完成内置功能
- 主功能和窗口,支持 Opengl 3.0+ 和 DirectX 10+
- ODBC 如何确定驱动程序支持哪些功能