Vla*_*sev 17 c++ gcc static-assert
我们现有的编译时断言实现基于负数组索引,并且它在GCC上提供差的诊断输出.C++ 0x static_assert是一个非常好的功能,它提供的诊断输出要好得多.我知道GCC已经实现了一些C++ 0x功能.有谁知道是否static_assert是其中之一,如果它是那么GCC版本?
Tob*_*ias 16
如果您需要使用不支持它的gcc版本,您可以使用
#include <boost/static_assert.hpp>
BOOST_STATIC_ASSERT( /* assertion */ )
Run Code Online (Sandbox Code Playgroud)
基本上,提升的作用是:
声明(但不要定义!)a
template< bool Condition > struct STATIC_ASSERTION_FAILURE;
Run Code Online (Sandbox Code Playgroud)
为断言持有的情况定义专门化:
template <> struct STATIC_ASSERTION_FAILURE< true > {};
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样定义STATIC_ASSERT:
#define STATIC_ASSERT(Condition) \
enum { dummy = sizeof(STATIC_ASSERTION_FAILURE< (bool)(Condition) > }
Run Code Online (Sandbox Code Playgroud)
诀窍是如果Condition为false,则编译器需要实例化struct
STATIC_ASSERTION_FAILURE< false >
Run Code Online (Sandbox Code Playgroud)
为了计算它的大小,这个失败,因为它没有定义.
小智 8
当使用-std=c++0x标志编译时,以下代码与g ++ 4.4.0一起工作:
int main() {
static_assert( false, "that was false" );
}
Run Code Online (Sandbox Code Playgroud)
它显示:
x.cpp: In function 'int main()':
x.cpp:2: error: static assertion failed: "that was false"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18965 次 |
| 最近记录: |