问题描述
|
我试图找出给定实现支持哪些算法标头的附加功能(gcc和MSVC就足够了)。
一种简单的方法是与执行核心功能的方法相同:检查编译器版本并定义一个宏(如果支持一种语言功能)。不幸的是,我找不到显示任何一个编译器版本号的列表。
仅仅检查一个通用的C ++ 0x宏(GXX_EXPERIMENTAL或__cplusplus)就足够了吗?还是应该检查编译器的更改列表并根据这些列表构建宏?
http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.200x
解决方法
由于所有编译器供应商都提供了哪个版本的可用列表,并且您还是要测试功能,因此我将使用编译器版本来检查特定功能。或者要求用户至少使用一个好的版本,而不用担心。
__cplusplus
不一定是C ++ 0x宏,它什么也没有告诉您。自GCC 4.3起已经存在ѭ1exist,所以这也很没用。
这是给海湾合作委员会的。
这是针对MSVC的。 (请注意:部分实现意味着破坏)
这是给英特尔的。
在这里,您可以找到要针对特定版本的编译器检查的宏。
,据我所知,唯一合适的解决方案是拥有一个构建脚本,该脚本尝试编译和运行使用该功能并具有运行时断言的文件。根据结果,在配置文件中添加#define CONFIG_NO_FEATURENAME
或类似名称,并使用#ifndef
保护您的使用和解决方法。
这样可以检查是否
该功能可用
功能正常运行(取决于断言的正确性)