我想在我工作的代码库中开始使用static_assert。不幸的是,并不是所有的C++编译器都支持它们。在过去,我们使用了编译时断言宏,这个宏对于我尝试过的所有编译器都是合理的(从SO!收集到的),但是它给出了一些尴尬的编译错误消息。
我们支持大量编译器,包括那些不支持static_assert的编译器。另外,因为我们的产品是一个带有源代码的SDK,我们的客户可以用他们想要的任何编译器重新编译它。因此,虽然我可以在我们使用的所有编译器中介绍条件编译,但是对于任何“未知”编译器,我都不可能这样做。
是否有一些编译时预定义的宏或其他工具是所有C++编译器中用于确定static_assert可用性的标准工具,还是只需要“知道”每个编译器支持什么?
发布于 2015-05-18 02:01:35
在C++14中,有特征测试宏,它允许您概括C++11/14/17特性的使用。对于static_assert,宏是__cpp_static_assert。
如果您的编译器本身并不支持这些(尚未),您可以根据编译器所支持的内容进行定义,但它们将与任何标准化的“未知”编译器向前兼容。
注意:这个答案是从我提出的将这个问题推广到任何C++11特性(C++11特性的可用性)的问题中得到的。我认为对于这个特定案例的动机有一些困惑,所给出的答案试图提供一个很好的静态断言,而不是实际问到的问题(实际上他们并没有这么做)。
https://stackoverflow.com/questions/30266009
复制相似问题