static_assert C 的可用性11
Availability of static_assert c++11
我想开始在我使用的代码库中使用 static_assert
。不幸的是,并非所有C 编译器都支持它们。过去,我们使用了一个编译时间的宏,该宏可合理地适用于我尝试过的所有编译器(从So中收集!),但是它给出了稍微尴尬的编译错误消息。
我们支持大量编译器,包括不支持static_assert
的编译器。另外,由于我们的产品是具有源代码的SDK,我们的客户可以将其与他们希望的任何编译器重新编译。因此,虽然我可以在我们使用的所有编译器中为此介绍条件编译,但我真的不可能为任何"未知"编译器进行操作。
是否有一些编译时预定义的宏或其他设施,这些宏或其他C 编译器的标准化设施可以确定static_assert
的可用性,或者您只是只需要"知道"每个编译器支持什么?
您可以考虑使用Boost的静态断言。
提示网站上的注意:
提升库旨在广泛有用,并且可在广泛的应用程序中使用。
因此,在使用语言功能时,Boost通常故意落后于落后。您可以在此处找到编译器兼容性列表。
如果您必须滚动自己的实施,这是Dobbs博士的文章。如果我没记错的话,Andrei Alexandrescu在他的现代C 设计中写了这一点。
在C 14中,有特征测试宏,可允许您推广使用C 11/14/17功能。对于static_assert
,宏为__cpp_static_assert
。
如果您的编译器固有地支持这些编译器,则可以根据对编译器的支持知识来定义它们,但它们将与任何标准化的"未知"编译器兼容。
。注意:这个答案是从我问的一个问题中获得的,该问题将这个答案概括为 c 11功能(C 11功能的可用性)。我认为这种特殊情况的动机有些困惑,而所给出的答案试图提供一个很好的静态断言,这比询问的实际问题还多(他们实际上没有这样做)。
- 获取 SFML 窗口的 HWND 和高可用性?
- 将 Boost.Fiber 与 Goroutines 进行比较可以纠正可用性
- 如何在源代码中使用执行策略检测 C++17 的扩展内存管理算法的可用性?
- 功能可用性
- 为什么有条件编译运算符模板会更改另一个运算符的可用性?
- C++宏来测试__func__、__FUNCTION__、__PRETTY_FUNCTION__等的可用性
- 检测此变量可用性
- 如何在变量函数参数列表中检测给定类型的参数的可用性,并在处理完所有参数后采取行动
- static_assert C 的可用性11
- 测试 x_np pthread 函数的可用性 - C/C++
- make_unique Xcode5 中的可用性
- 检测Visual Studio中SSE/SSE2指令集的可用性
- 使用boost检查端口可用性
- 在确保翻译单元之间的可用性时,不赞成使用静态
- Internet可用性通知.net vs native (c++)
- c++中结构体名称的可用性
- Qt -用预处理器指令检查链接的.lib在windows上的可用性
- 检查矢量的可用性(性能问题)
- c++结构中private和protected的可用性
- c++中的代码可用性