static_assert在哪里实现?

时间:2015-08-10 18:32:30

标签: c++11 typetraits

implemented库中的static_assert Loki的方式(它实际上是一个名为STATIC_CHECK的预处理器宏),可以按如下方式使用:< / p>

STATIC_CHECK(myCondition, My_Error_Message); 

请注意My_Error_Message必须是有效的标识符。

我想知道如何为C++11标准实现static_assert以获取错误消息的字符串文字参数。

我决定查看type_traits包含文件,该文件位于我的Ubuntu 14.04上使用g ++ 4.8.2的/usr/include/c++/4.8。令我惊讶的是,我发现只有static_assert的用法,而不是定义(也不是预处理器宏)。我没有在type_traits包含的文件中找到它。

那么,我在哪里寻找static_assert的实现?

2 个答案:

答案 0 :(得分:3)

static_assert是C ++ 11中新的语言级功能,而不是头文件中包含的库。符合标准的C ++实现可以自由地实现static_assert。它可以内置到编译器中(我怀疑大多数编译器会这样做),或者它可能是库的一部分(尽管这很有挑战性,因为static_assert不需要头文件)。我认为找出适合您的特定编译器的最佳方法是检查文档,并在必要时查看源代码。

答案 1 :(得分:0)

static_assert必须内置于编译器中,因为必须在编译时检查检查的条件。如果要使用某些库代码进行检查,则可以在运行时完成。

另一方面,assert是一个宏,已经说明它是在库代码中实现的,并且它的检查是在运行时完成的。